Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 295003 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java (-9 / +1440 lines)
Lines 12-17 Link Here
12
12
13
import java.util.Arrays;
13
import java.util.Arrays;
14
import java.util.Collection;
14
import java.util.Collection;
15
import java.util.Iterator;
15
16
16
import junit.framework.TestCase;
17
import junit.framework.TestCase;
17
18
Lines 21-26 Link Here
21
import org.eclipse.e4.core.services.context.spi.IContextConstants;
22
import org.eclipse.e4.core.services.context.spi.IContextConstants;
22
import org.eclipse.e4.ui.model.application.MApplication;
23
import org.eclipse.e4.ui.model.application.MApplication;
23
import org.eclipse.e4.ui.model.application.MApplicationFactory;
24
import org.eclipse.e4.ui.model.application.MApplicationFactory;
25
import org.eclipse.e4.ui.model.application.MElementContainer;
26
import org.eclipse.e4.ui.model.application.MPSCElement;
24
import org.eclipse.e4.ui.model.application.MPart;
27
import org.eclipse.e4.ui.model.application.MPart;
25
import org.eclipse.e4.ui.model.application.MPartDescriptor;
28
import org.eclipse.e4.ui.model.application.MPartDescriptor;
26
import org.eclipse.e4.ui.model.application.MPartStack;
29
import org.eclipse.e4.ui.model.application.MPartStack;
Lines 1268-1285 Link Here
1268
				.setURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.application.ClientEditor");
1271
				.setURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.application.ClientEditor");
1269
		window.getChildren().add(saveablePart);
1272
		window.getChildren().add(saveablePart);
1270
1273
1271
		// setup the context
1274
		initialize(applicationContext, application);
1272
		applicationContext.set(MApplication.class.getName(), application);
1273
		application.setContext(applicationContext);
1274
		Workbench.processHierarchy(application);
1275
		((Notifier) application).eAdapters().add(
1276
				new UIEventPublisher(applicationContext));
1277
1275
1278
		getEngine().createGui(window);
1276
		getEngine().createGui(window);
1279
1277
1280
		ClientEditor editor = (ClientEditor) saveablePart.getObject();
1281
		editor.setThrowException(throwException);
1282
1283
		window.getContext().set(ISaveHandler.class.getName(),
1278
		window.getContext().set(ISaveHandler.class.getName(),
1284
				new ISaveHandler() {
1279
				new ISaveHandler() {
1285
					public Save[] promptToSave(
1280
					public Save[] promptToSave(
Lines 1292-1297 Link Here
1292
					}
1287
					}
1293
				});
1288
				});
1294
1289
1290
		ClientEditor editor = (ClientEditor) saveablePart.getObject();
1291
		editor.setThrowException(throwException);
1292
1295
		EPartService partService = (EPartService) window.getContext().get(
1293
		EPartService partService = (EPartService) window.getContext().get(
1296
				EPartService.class.getName());
1294
				EPartService.class.getName());
1297
		if (beforeDirty) {
1295
		if (beforeDirty) {
Lines 1506-1511 Link Here
1506
		testSavePart(ISaveHandler.Save.CANCEL, false, false, false);
1504
		testSavePart(ISaveHandler.Save.CANCEL, false, false, false);
1507
	}
1505
	}
1508
1506
1507
	private MSaveablePart createSaveablePart(
1508
			MElementContainer<MPSCElement> container, boolean beforeDirty) {
1509
		MSaveablePart saveablePart = MApplicationFactory.eINSTANCE
1510
				.createSaveablePart();
1511
		saveablePart.setDirty(beforeDirty);
1512
		saveablePart
1513
				.setURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.application.ClientEditor");
1514
		container.getChildren().add(saveablePart);
1515
		return saveablePart;
1516
	}
1517
1518
	private Save prompt(Save[] candidates, MSaveablePart partToTest,
1519
			MSaveablePart part) {
1520
		return partToTest == part ? candidates[0] : candidates[1];
1521
	}
1522
1523
	private void testSaveAll(final Save[] returnValues, boolean confirm,
1524
			boolean[] beforeDirty, boolean[] afterDirty, boolean success,
1525
			boolean[] saveCalled, boolean[] throwException) {
1526
		MApplication application = MApplicationFactory.eINSTANCE
1527
				.createApplication();
1528
1529
		MWindow window = MApplicationFactory.eINSTANCE.createWindow();
1530
		application.getChildren().add(window);
1531
		final MSaveablePart saveablePart = createSaveablePart(window,
1532
				beforeDirty[0]);
1533
		final MSaveablePart saveablePart2 = createSaveablePart(window,
1534
				beforeDirty[1]);
1535
1536
		// setup the context
1537
		initialize(applicationContext, application);
1538
1539
		getEngine().createGui(window);
1540
1541
		ClientEditor editor = (ClientEditor) saveablePart.getObject();
1542
		editor.setThrowException(throwException[0]);
1543
1544
		ClientEditor editor2 = (ClientEditor) saveablePart2.getObject();
1545
		editor2.setThrowException(throwException[1]);
1546
1547
		window.getContext().set(ISaveHandler.class.getName(),
1548
				new ISaveHandler() {
1549
					public Save[] promptToSave(
1550
							Collection<MSaveablePart> saveableParts) {
1551
						int index = 0;
1552
						Save[] prompt = new Save[saveableParts.size()];
1553
						Iterator<MSaveablePart> it = saveableParts.iterator();
1554
						while (it.hasNext()) {
1555
							prompt[index] = prompt(returnValues, it.next(),
1556
									saveablePart);
1557
							index++;
1558
						}
1559
						return prompt;
1560
					}
1561
1562
					public Save promptToSave(MSaveablePart saveablePart) {
1563
						return null;
1564
					}
1565
				});
1566
1567
		EPartService partService = (EPartService) window.getContext().get(
1568
				EPartService.class.getName());
1569
		assertEquals(success, partService.saveAll(confirm));
1570
1571
		assertEquals(afterDirty[0], saveablePart.isDirty());
1572
		assertEquals(saveCalled[0], editor.wasSaveCalled());
1573
1574
		assertEquals(afterDirty[1], saveablePart2.isDirty());
1575
		assertEquals(saveCalled[1], editor2.wasSaveCalled());
1576
	}
1577
1578
	private boolean hasCancel(Save[] returnValues, boolean[] beforeDirty) {
1579
		for (int i = 0; i < returnValues.length; i++) {
1580
			if (returnValues[i] == Save.CANCEL && beforeDirty[i]) {
1581
				return true;
1582
			}
1583
		}
1584
		return false;
1585
	}
1586
1587
	private boolean isSuccessful(Save[] returnValues, boolean confirm,
1588
			boolean[] beforeDirty, boolean[] throwException) {
1589
		if (confirm) {
1590
			if (returnValues[0] == Save.YES) {
1591
				if (returnValues[1] == Save.YES) {
1592
					if (beforeDirty[0]) {
1593
						if (beforeDirty[1]) {
1594
							return !throwException[0] && !throwException[1];
1595
						}
1596
						return !throwException[0];
1597
					} else if (beforeDirty[1]) {
1598
						return !throwException[1];
1599
					}
1600
					return true;
1601
				} else if (beforeDirty[0]) {
1602
					return !throwException[0];
1603
				}
1604
				return true;
1605
			} else if (returnValues[1] == Save.YES) {
1606
				if (beforeDirty[1]) {
1607
					return !throwException[1];
1608
				}
1609
			}
1610
			return true;
1611
		} else if (beforeDirty[0]) {
1612
			if (beforeDirty[1]) {
1613
				return !throwException[0] && !throwException[1];
1614
			}
1615
			return !throwException[0];
1616
		} else if (beforeDirty[1]) {
1617
			return !throwException[1];
1618
		}
1619
		return true;
1620
	}
1621
1622
	private boolean[] afterDirty(Save[] returnValues, boolean confirm,
1623
			boolean[] beforeDirty, boolean[] throwException) {
1624
		if (confirm) {
1625
			if (returnValues[0] == Save.YES) {
1626
				if (returnValues[1] == Save.YES) {
1627
					return new boolean[] {
1628
							beforeDirty[0] ? throwException[0] : false,
1629
							beforeDirty[1] ? throwException[1] : false };
1630
				}
1631
				return new boolean[] {
1632
						beforeDirty[0] ? throwException[0] : false,
1633
						beforeDirty[1] };
1634
			} else if (returnValues[1] == Save.YES) {
1635
				return new boolean[] { beforeDirty[0],
1636
						beforeDirty[1] ? throwException[1] : false };
1637
			}
1638
			return beforeDirty;
1639
		} else if (beforeDirty[0]) {
1640
			if (beforeDirty[1]) {
1641
				return new boolean[] { throwException[0], throwException[1] };
1642
			}
1643
			return new boolean[] { throwException[0], false };
1644
		} else if (beforeDirty[1]) {
1645
			return new boolean[] { false, throwException[1] };
1646
		}
1647
		return new boolean[] { false, false };
1648
	}
1649
1650
	private boolean[] saveCalled(Save[] returnValues, boolean confirm,
1651
			boolean[] beforeDirty) {
1652
		if (confirm) {
1653
			if (returnValues[0] == Save.YES) {
1654
				if (returnValues[1] == Save.YES) {
1655
					return new boolean[] { beforeDirty[0], beforeDirty[1] };
1656
				}
1657
				return new boolean[] { beforeDirty[0], false };
1658
			} else if (returnValues[1] == Save.YES) {
1659
				return new boolean[] { false, beforeDirty[1] };
1660
			}
1661
			return new boolean[] { false, false };
1662
		}
1663
		return beforeDirty;
1664
	}
1665
1666
	private void testSaveAll(Save[] returnValues, boolean confirm,
1667
			boolean[] beforeDirty, boolean[] throwException) {
1668
		if (hasCancel(returnValues, beforeDirty) && confirm) {
1669
			testSaveAll(returnValues, confirm, beforeDirty, beforeDirty, false,
1670
					new boolean[] { false, false }, throwException);
1671
		} else {
1672
			testSaveAll(returnValues, confirm, beforeDirty, afterDirty(
1673
					returnValues, confirm, beforeDirty, throwException),
1674
					isSuccessful(returnValues, confirm, beforeDirty,
1675
							throwException), saveCalled(returnValues, confirm,
1676
							beforeDirty), throwException);
1677
		}
1678
	}
1679
1680
	public void testSaveAll_YY_True_TT_TT() {
1681
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1682
				true, true }, new boolean[] { true, true });
1683
	}
1684
1685
	public void testSaveAll_YY_True_TT_TF() {
1686
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1687
				true, true }, new boolean[] { true, false });
1688
	}
1689
1690
	public void testSaveAll_YY_True_TT_FT() {
1691
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1692
				true, true }, new boolean[] { false, true });
1693
	}
1694
1695
	public void testSaveAll_YY_True_TF_TT() {
1696
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1697
				true, false }, new boolean[] { true, true });
1698
	}
1699
1700
	public void testSaveAll_YY_True_TF_TF() {
1701
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1702
				true, false }, new boolean[] { true, false });
1703
	}
1704
1705
	public void testSaveAll_YY_True_TF_FT() {
1706
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1707
				true, false }, new boolean[] { false, true });
1708
	}
1709
1710
	public void testSaveAll_YY_True_TF_FF() {
1711
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1712
				true, false }, new boolean[] { false, false });
1713
	}
1714
1715
	public void testSaveAll_YY_True_FT_TT() {
1716
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1717
				false, true }, new boolean[] { true, true });
1718
	}
1719
1720
	public void testSaveAll_YY_True_FT_TF() {
1721
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1722
				false, true }, new boolean[] { true, false });
1723
	}
1724
1725
	public void testSaveAll_YY_True_FT_FT() {
1726
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1727
				false, true }, new boolean[] { false, true });
1728
	}
1729
1730
	public void testSaveAll_YY_True_FF_TT() {
1731
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1732
				false, false }, new boolean[] { true, true });
1733
	}
1734
1735
	public void testSaveAll_YY_True_FF_TF() {
1736
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1737
				false, false }, new boolean[] { true, false });
1738
	}
1739
1740
	public void testSaveAll_YY_True_FF_FT() {
1741
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1742
				false, false }, new boolean[] { false, true });
1743
	}
1744
1745
	public void testSaveAll_YY_True_FF_FF() {
1746
		testSaveAll(new Save[] { Save.YES, Save.YES }, true, new boolean[] {
1747
				false, false }, new boolean[] { false, false });
1748
	}
1749
1750
	public void testSaveAll_YY_False_TT_TT() {
1751
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1752
				true, true }, new boolean[] { true, true });
1753
	}
1754
1755
	public void testSaveAll_YY_False_TT_TF() {
1756
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1757
				true, true }, new boolean[] { true, false });
1758
	}
1759
1760
	public void testSaveAll_YY_False_TT_FT() {
1761
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1762
				true, true }, new boolean[] { false, true });
1763
	}
1764
1765
	public void testSaveAll_YY_False_TF_TT() {
1766
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1767
				true, false }, new boolean[] { true, true });
1768
	}
1769
1770
	public void testSaveAll_YY_False_TF_TF() {
1771
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1772
				true, false }, new boolean[] { true, false });
1773
	}
1774
1775
	public void testSaveAll_YY_False_TF_FT() {
1776
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1777
				true, false }, new boolean[] { false, true });
1778
	}
1779
1780
	public void testSaveAll_YY_False_TF_FF() {
1781
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1782
				true, false }, new boolean[] { false, false });
1783
	}
1784
1785
	public void testSaveAll_YY_False_FT_TT() {
1786
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1787
				false, true }, new boolean[] { true, true });
1788
	}
1789
1790
	public void testSaveAll_YY_False_FT_TF() {
1791
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1792
				false, true }, new boolean[] { true, false });
1793
	}
1794
1795
	public void testSaveAll_YY_False_FT_FT() {
1796
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1797
				false, true }, new boolean[] { false, true });
1798
	}
1799
1800
	public void testSaveAll_YY_False_FF_TT() {
1801
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1802
				false, false }, new boolean[] { true, true });
1803
	}
1804
1805
	public void testSaveAll_YY_False_FF_TF() {
1806
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1807
				false, false }, new boolean[] { true, false });
1808
	}
1809
1810
	public void testSaveAll_YY_False_FF_FT() {
1811
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1812
				false, false }, new boolean[] { false, true });
1813
	}
1814
1815
	public void testSaveAll_YY_False_FF_FF() {
1816
		testSaveAll(new Save[] { Save.YES, Save.YES }, false, new boolean[] {
1817
				false, false }, new boolean[] { false, false });
1818
	}
1819
1820
	public void testSaveAll_YN_True_TT_TT() {
1821
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1822
				true, true }, new boolean[] { true, true });
1823
	}
1824
1825
	public void testSaveAll_YN_True_TT_TF() {
1826
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1827
				true, true }, new boolean[] { true, false });
1828
	}
1829
1830
	public void testSaveAll_YN_True_TT_FT() {
1831
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1832
				true, true }, new boolean[] { false, true });
1833
	}
1834
1835
	public void testSaveAll_YN_True_TF_TT() {
1836
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1837
				true, false }, new boolean[] { true, true });
1838
	}
1839
1840
	public void testSaveAll_YN_True_TF_TF() {
1841
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1842
				true, false }, new boolean[] { true, false });
1843
	}
1844
1845
	public void testSaveAll_YN_True_TF_FT() {
1846
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1847
				true, false }, new boolean[] { false, true });
1848
	}
1849
1850
	public void testSaveAll_YN_True_TF_FF() {
1851
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1852
				true, false }, new boolean[] { false, false });
1853
	}
1854
1855
	public void testSaveAll_YN_True_FT_TT() {
1856
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1857
				false, true }, new boolean[] { true, true });
1858
	}
1859
1860
	public void testSaveAll_YN_True_FT_TF() {
1861
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1862
				false, true }, new boolean[] { true, false });
1863
	}
1864
1865
	public void testSaveAll_YN_True_FT_FT() {
1866
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1867
				false, true }, new boolean[] { false, true });
1868
	}
1869
1870
	public void testSaveAll_YN_True_FF_TT() {
1871
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1872
				false, false }, new boolean[] { true, true });
1873
	}
1874
1875
	public void testSaveAll_YN_True_FF_TF() {
1876
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1877
				false, false }, new boolean[] { true, false });
1878
	}
1879
1880
	public void testSaveAll_YN_True_FF_FT() {
1881
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1882
				false, false }, new boolean[] { false, true });
1883
	}
1884
1885
	public void testSaveAll_YN_True_FF_FF() {
1886
		testSaveAll(new Save[] { Save.YES, Save.NO }, true, new boolean[] {
1887
				false, false }, new boolean[] { false, false });
1888
	}
1889
1890
	public void testSaveAll_YN_False_TT_TT() {
1891
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1892
				true, true }, new boolean[] { true, true });
1893
	}
1894
1895
	public void testSaveAll_YN_False_TT_TF() {
1896
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1897
				true, true }, new boolean[] { true, false });
1898
	}
1899
1900
	public void testSaveAll_YN_False_TT_FT() {
1901
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1902
				true, true }, new boolean[] { false, true });
1903
	}
1904
1905
	public void testSaveAll_YN_False_TF_TT() {
1906
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1907
				true, false }, new boolean[] { true, true });
1908
	}
1909
1910
	public void testSaveAll_YN_False_TF_TF() {
1911
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1912
				true, false }, new boolean[] { true, false });
1913
	}
1914
1915
	public void testSaveAll_YN_False_TF_FT() {
1916
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1917
				true, false }, new boolean[] { false, true });
1918
	}
1919
1920
	public void testSaveAll_YN_False_TF_FF() {
1921
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1922
				true, false }, new boolean[] { false, false });
1923
	}
1924
1925
	public void testSaveAll_YN_False_FT_TT() {
1926
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1927
				false, true }, new boolean[] { true, true });
1928
	}
1929
1930
	public void testSaveAll_YN_False_FT_TF() {
1931
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1932
				false, true }, new boolean[] { true, false });
1933
	}
1934
1935
	public void testSaveAll_YN_False_FT_FT() {
1936
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1937
				false, true }, new boolean[] { false, true });
1938
	}
1939
1940
	public void testSaveAll_YN_False_FF_TT() {
1941
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1942
				false, false }, new boolean[] { true, true });
1943
	}
1944
1945
	public void testSaveAll_YN_False_FF_TF() {
1946
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1947
				false, false }, new boolean[] { true, false });
1948
	}
1949
1950
	public void testSaveAll_YN_False_FF_FT() {
1951
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1952
				false, false }, new boolean[] { false, true });
1953
	}
1954
1955
	public void testSaveAll_YN_False_FF_FF() {
1956
		testSaveAll(new Save[] { Save.YES, Save.NO }, false, new boolean[] {
1957
				false, false }, new boolean[] { false, false });
1958
	}
1959
1960
	public void testSaveAll_YC_True_TT_TT() {
1961
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1962
				true, true }, new boolean[] { true, true });
1963
	}
1964
1965
	public void testSaveAll_YC_True_TT_TF() {
1966
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1967
				true, true }, new boolean[] { true, false });
1968
	}
1969
1970
	public void testSaveAll_YC_True_TT_FT() {
1971
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1972
				true, true }, new boolean[] { false, true });
1973
	}
1974
1975
	public void testSaveAll_YC_True_TF_TT() {
1976
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1977
				true, false }, new boolean[] { true, true });
1978
	}
1979
1980
	public void testSaveAll_YC_True_TF_TF() {
1981
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1982
				true, false }, new boolean[] { true, false });
1983
	}
1984
1985
	public void testSaveAll_YC_True_TF_FT() {
1986
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1987
				true, false }, new boolean[] { false, true });
1988
	}
1989
1990
	public void testSaveAll_YC_True_TF_FF() {
1991
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1992
				true, false }, new boolean[] { false, false });
1993
	}
1994
1995
	public void testSaveAll_YC_True_FT_TT() {
1996
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
1997
				false, true }, new boolean[] { true, true });
1998
	}
1999
2000
	public void testSaveAll_YC_True_FT_TF() {
2001
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2002
				false, true }, new boolean[] { true, false });
2003
	}
2004
2005
	public void testSaveAll_YC_True_FT_FT() {
2006
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2007
				false, true }, new boolean[] { false, true });
2008
	}
2009
2010
	public void testSaveAll_YC_True_FF_TT() {
2011
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2012
				false, false }, new boolean[] { true, true });
2013
	}
2014
2015
	public void testSaveAll_YC_True_FF_TF() {
2016
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2017
				false, false }, new boolean[] { true, false });
2018
	}
2019
2020
	public void testSaveAll_YC_True_FF_FT() {
2021
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2022
				false, false }, new boolean[] { false, true });
2023
	}
2024
2025
	public void testSaveAll_YC_True_FF_FF() {
2026
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, true, new boolean[] {
2027
				false, false }, new boolean[] { false, false });
2028
	}
2029
2030
	public void testSaveAll_YC_False_TT_TT() {
2031
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2032
				true, true }, new boolean[] { true, true });
2033
	}
2034
2035
	public void testSaveAll_YC_False_TT_TF() {
2036
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2037
				true, true }, new boolean[] { true, false });
2038
	}
2039
2040
	public void testSaveAll_YC_False_TT_FT() {
2041
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2042
				true, true }, new boolean[] { false, true });
2043
	}
2044
2045
	public void testSaveAll_YC_False_TF_TT() {
2046
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2047
				true, false }, new boolean[] { true, true });
2048
	}
2049
2050
	public void testSaveAll_YC_False_TF_TF() {
2051
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2052
				true, false }, new boolean[] { true, false });
2053
	}
2054
2055
	public void testSaveAll_YC_False_TF_FT() {
2056
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2057
				true, false }, new boolean[] { false, true });
2058
	}
2059
2060
	public void testSaveAll_YC_False_TF_FF() {
2061
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2062
				true, false }, new boolean[] { false, false });
2063
	}
2064
2065
	public void testSaveAll_YC_False_FT_TT() {
2066
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2067
				false, true }, new boolean[] { true, true });
2068
	}
2069
2070
	public void testSaveAll_YC_False_FT_TF() {
2071
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2072
				false, true }, new boolean[] { true, false });
2073
	}
2074
2075
	public void testSaveAll_YC_False_FT_FT() {
2076
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2077
				false, true }, new boolean[] { false, true });
2078
	}
2079
2080
	public void testSaveAll_YC_False_FF_TT() {
2081
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2082
				false, false }, new boolean[] { true, true });
2083
	}
2084
2085
	public void testSaveAll_YC_False_FF_TF() {
2086
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2087
				false, false }, new boolean[] { true, false });
2088
	}
2089
2090
	public void testSaveAll_YC_False_FF_FT() {
2091
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2092
				false, false }, new boolean[] { false, true });
2093
	}
2094
2095
	public void testSaveAll_YC_False_FF_FF() {
2096
		testSaveAll(new Save[] { Save.YES, Save.CANCEL }, false, new boolean[] {
2097
				false, false }, new boolean[] { false, false });
2098
	}
2099
2100
	public void testSaveAll_NY_True_TT_TT() {
2101
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2102
				true, true }, new boolean[] { true, true });
2103
	}
2104
2105
	public void testSaveAll_NY_True_TT_TF() {
2106
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2107
				true, true }, new boolean[] { true, false });
2108
	}
2109
2110
	public void testSaveAll_NY_True_TT_FT() {
2111
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2112
				true, true }, new boolean[] { false, true });
2113
	}
2114
2115
	public void testSaveAll_NY_True_TF_TT() {
2116
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2117
				true, false }, new boolean[] { true, true });
2118
	}
2119
2120
	public void testSaveAll_NY_True_TF_TF() {
2121
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2122
				true, false }, new boolean[] { true, false });
2123
	}
2124
2125
	public void testSaveAll_NY_True_TF_FT() {
2126
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2127
				true, false }, new boolean[] { false, true });
2128
	}
2129
2130
	public void testSaveAll_NY_True_TF_FF() {
2131
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2132
				true, false }, new boolean[] { false, false });
2133
	}
2134
2135
	public void testSaveAll_NY_True_FT_TT() {
2136
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2137
				false, true }, new boolean[] { true, true });
2138
	}
2139
2140
	public void testSaveAll_NY_True_FT_TF() {
2141
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2142
				false, true }, new boolean[] { true, false });
2143
	}
2144
2145
	public void testSaveAll_NY_True_FT_FT() {
2146
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2147
				false, true }, new boolean[] { false, true });
2148
	}
2149
2150
	public void testSaveAll_NY_True_FF_TT() {
2151
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2152
				false, false }, new boolean[] { true, true });
2153
	}
2154
2155
	public void testSaveAll_NY_True_FF_TF() {
2156
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2157
				false, false }, new boolean[] { true, false });
2158
	}
2159
2160
	public void testSaveAll_NY_True_FF_FT() {
2161
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2162
				false, false }, new boolean[] { false, true });
2163
	}
2164
2165
	public void testSaveAll_NY_True_FF_FF() {
2166
		testSaveAll(new Save[] { Save.NO, Save.YES }, true, new boolean[] {
2167
				false, false }, new boolean[] { false, false });
2168
	}
2169
2170
	public void testSaveAll_NY_False_TT_TT() {
2171
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2172
				true, true }, new boolean[] { true, true });
2173
	}
2174
2175
	public void testSaveAll_NY_False_TT_TF() {
2176
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2177
				true, true }, new boolean[] { true, false });
2178
	}
2179
2180
	public void testSaveAll_NY_False_TT_FT() {
2181
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2182
				true, true }, new boolean[] { false, true });
2183
	}
2184
2185
	public void testSaveAll_NY_False_TF_TT() {
2186
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2187
				true, false }, new boolean[] { true, true });
2188
	}
2189
2190
	public void testSaveAll_NY_False_TF_TF() {
2191
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2192
				true, false }, new boolean[] { true, false });
2193
	}
2194
2195
	public void testSaveAll_NY_False_TF_FT() {
2196
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2197
				true, false }, new boolean[] { false, true });
2198
	}
2199
2200
	public void testSaveAll_NY_False_TF_FF() {
2201
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2202
				true, false }, new boolean[] { false, false });
2203
	}
2204
2205
	public void testSaveAll_NY_False_FT_TT() {
2206
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2207
				false, true }, new boolean[] { true, true });
2208
	}
2209
2210
	public void testSaveAll_NY_False_FT_TF() {
2211
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2212
				false, true }, new boolean[] { true, false });
2213
	}
2214
2215
	public void testSaveAll_NY_False_FT_FT() {
2216
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2217
				false, true }, new boolean[] { false, true });
2218
	}
2219
2220
	public void testSaveAll_NY_False_FF_TT() {
2221
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2222
				false, false }, new boolean[] { true, true });
2223
	}
2224
2225
	public void testSaveAll_NY_False_FF_TF() {
2226
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2227
				false, false }, new boolean[] { true, false });
2228
	}
2229
2230
	public void testSaveAll_NY_False_FF_FT() {
2231
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2232
				false, false }, new boolean[] { false, true });
2233
	}
2234
2235
	public void testSaveAll_NY_False_FF_FF() {
2236
		testSaveAll(new Save[] { Save.NO, Save.YES }, false, new boolean[] {
2237
				false, false }, new boolean[] { false, false });
2238
	}
2239
2240
	public void testSaveAll_NN_True_TT_TT() {
2241
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2242
				true, true }, new boolean[] { true, true });
2243
	}
2244
2245
	public void testSaveAll_NN_True_TT_TF() {
2246
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2247
				true, true }, new boolean[] { true, false });
2248
	}
2249
2250
	public void testSaveAll_NN_True_TT_FT() {
2251
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2252
				true, true }, new boolean[] { false, true });
2253
	}
2254
2255
	public void testSaveAll_NN_True_TF_TT() {
2256
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2257
				true, false }, new boolean[] { true, true });
2258
	}
2259
2260
	public void testSaveAll_NN_True_TF_TF() {
2261
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2262
				true, false }, new boolean[] { true, false });
2263
	}
2264
2265
	public void testSaveAll_NN_True_TF_FT() {
2266
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2267
				true, false }, new boolean[] { false, true });
2268
	}
2269
2270
	public void testSaveAll_NN_True_TF_FF() {
2271
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2272
				true, false }, new boolean[] { false, false });
2273
	}
2274
2275
	public void testSaveAll_NN_True_FT_TT() {
2276
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2277
				false, true }, new boolean[] { true, true });
2278
	}
2279
2280
	public void testSaveAll_NN_True_FT_TF() {
2281
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2282
				false, true }, new boolean[] { true, false });
2283
	}
2284
2285
	public void testSaveAll_NN_True_FT_FT() {
2286
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2287
				false, true }, new boolean[] { false, true });
2288
	}
2289
2290
	public void testSaveAll_NN_True_FF_TT() {
2291
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2292
				false, false }, new boolean[] { true, true });
2293
	}
2294
2295
	public void testSaveAll_NN_True_FF_TF() {
2296
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2297
				false, false }, new boolean[] { true, false });
2298
	}
2299
2300
	public void testSaveAll_NN_True_FF_FT() {
2301
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2302
				false, false }, new boolean[] { false, true });
2303
	}
2304
2305
	public void testSaveAll_NN_True_FF_FF() {
2306
		testSaveAll(new Save[] { Save.NO, Save.NO }, true, new boolean[] {
2307
				false, false }, new boolean[] { false, false });
2308
	}
2309
2310
	public void testSaveAll_NN_False_TT_TT() {
2311
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2312
				true, true }, new boolean[] { true, true });
2313
	}
2314
2315
	public void testSaveAll_NN_False_TT_TF() {
2316
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2317
				true, true }, new boolean[] { true, false });
2318
	}
2319
2320
	public void testSaveAll_NN_False_TT_FT() {
2321
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2322
				true, true }, new boolean[] { false, true });
2323
	}
2324
2325
	public void testSaveAll_NN_False_TF_TT() {
2326
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2327
				true, false }, new boolean[] { true, true });
2328
	}
2329
2330
	public void testSaveAll_NN_False_TF_TF() {
2331
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2332
				true, false }, new boolean[] { true, false });
2333
	}
2334
2335
	public void testSaveAll_NN_False_TF_FT() {
2336
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2337
				true, false }, new boolean[] { false, true });
2338
	}
2339
2340
	public void testSaveAll_NN_False_TF_FF() {
2341
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2342
				true, false }, new boolean[] { false, false });
2343
	}
2344
2345
	public void testSaveAll_NN_False_FT_TT() {
2346
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2347
				false, true }, new boolean[] { true, true });
2348
	}
2349
2350
	public void testSaveAll_NN_False_FT_TF() {
2351
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2352
				false, true }, new boolean[] { true, false });
2353
	}
2354
2355
	public void testSaveAll_NN_False_FT_FT() {
2356
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2357
				false, true }, new boolean[] { false, true });
2358
	}
2359
2360
	public void testSaveAll_NN_False_FF_TT() {
2361
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2362
				false, false }, new boolean[] { true, true });
2363
	}
2364
2365
	public void testSaveAll_NN_False_FF_TF() {
2366
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2367
				false, false }, new boolean[] { true, false });
2368
	}
2369
2370
	public void testSaveAll_NN_False_FF_FT() {
2371
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2372
				false, false }, new boolean[] { false, true });
2373
	}
2374
2375
	public void testSaveAll_NN_False_FF_FF() {
2376
		testSaveAll(new Save[] { Save.NO, Save.NO }, false, new boolean[] {
2377
				false, false }, new boolean[] { false, false });
2378
	}
2379
2380
	public void testSaveAll_NC_True_TT_TT() {
2381
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2382
				true, true }, new boolean[] { true, true });
2383
	}
2384
2385
	public void testSaveAll_NC_True_TT_TF() {
2386
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2387
				true, true }, new boolean[] { true, false });
2388
	}
2389
2390
	public void testSaveAll_NC_True_TT_FT() {
2391
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2392
				true, true }, new boolean[] { false, true });
2393
	}
2394
2395
	public void testSaveAll_NC_True_TF_TT() {
2396
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2397
				true, false }, new boolean[] { true, true });
2398
	}
2399
2400
	public void testSaveAll_NC_True_TF_TF() {
2401
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2402
				true, false }, new boolean[] { true, false });
2403
	}
2404
2405
	public void testSaveAll_NC_True_TF_FT() {
2406
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2407
				true, false }, new boolean[] { false, true });
2408
	}
2409
2410
	public void testSaveAll_NC_True_TF_FF() {
2411
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2412
				true, false }, new boolean[] { false, false });
2413
	}
2414
2415
	public void testSaveAll_NC_True_FT_TT() {
2416
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2417
				false, true }, new boolean[] { true, true });
2418
	}
2419
2420
	public void testSaveAll_NC_True_FT_TF() {
2421
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2422
				false, true }, new boolean[] { true, false });
2423
	}
2424
2425
	public void testSaveAll_NC_True_FT_FT() {
2426
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2427
				false, true }, new boolean[] { false, true });
2428
	}
2429
2430
	public void testSaveAll_NC_True_FF_TT() {
2431
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2432
				false, false }, new boolean[] { true, true });
2433
	}
2434
2435
	public void testSaveAll_NC_True_FF_TF() {
2436
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2437
				false, false }, new boolean[] { true, false });
2438
	}
2439
2440
	public void testSaveAll_NC_True_FF_FT() {
2441
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2442
				false, false }, new boolean[] { false, true });
2443
	}
2444
2445
	public void testSaveAll_NC_True_FF_FF() {
2446
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, true, new boolean[] {
2447
				false, false }, new boolean[] { false, false });
2448
	}
2449
2450
	public void testSaveAll_NC_False_TT_TT() {
2451
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2452
				true, true }, new boolean[] { true, true });
2453
	}
2454
2455
	public void testSaveAll_NC_False_TT_TF() {
2456
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2457
				true, true }, new boolean[] { true, false });
2458
	}
2459
2460
	public void testSaveAll_NC_False_TT_FT() {
2461
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2462
				true, true }, new boolean[] { false, true });
2463
	}
2464
2465
	public void testSaveAll_NC_False_TF_TT() {
2466
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2467
				true, false }, new boolean[] { true, true });
2468
	}
2469
2470
	public void testSaveAll_NC_False_TF_TF() {
2471
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2472
				true, false }, new boolean[] { true, false });
2473
	}
2474
2475
	public void testSaveAll_NC_False_TF_FT() {
2476
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2477
				true, false }, new boolean[] { false, true });
2478
	}
2479
2480
	public void testSaveAll_NC_False_TF_FF() {
2481
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2482
				true, false }, new boolean[] { false, false });
2483
	}
2484
2485
	public void testSaveAll_NC_False_FT_TT() {
2486
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2487
				false, true }, new boolean[] { true, true });
2488
	}
2489
2490
	public void testSaveAll_NC_False_FT_TF() {
2491
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2492
				false, true }, new boolean[] { true, false });
2493
	}
2494
2495
	public void testSaveAll_NC_False_FT_FT() {
2496
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2497
				false, true }, new boolean[] { false, true });
2498
	}
2499
2500
	public void testSaveAll_NC_False_FF_TT() {
2501
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2502
				false, false }, new boolean[] { true, true });
2503
	}
2504
2505
	public void testSaveAll_NC_False_FF_TF() {
2506
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2507
				false, false }, new boolean[] { true, false });
2508
	}
2509
2510
	public void testSaveAll_NC_False_FF_FT() {
2511
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2512
				false, false }, new boolean[] { false, true });
2513
	}
2514
2515
	public void testSaveAll_NC_False_FF_FF() {
2516
		testSaveAll(new Save[] { Save.NO, Save.CANCEL }, false, new boolean[] {
2517
				false, false }, new boolean[] { false, false });
2518
	}
2519
2520
	public void testSaveAll_CY_True_TT_TT() {
2521
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2522
				true, true }, new boolean[] { true, true });
2523
	}
2524
2525
	public void testSaveAll_CY_True_TT_TF() {
2526
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2527
				true, true }, new boolean[] { true, false });
2528
	}
2529
2530
	public void testSaveAll_CY_True_TT_FT() {
2531
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2532
				true, true }, new boolean[] { false, true });
2533
	}
2534
2535
	public void testSaveAll_CY_True_TF_TT() {
2536
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2537
				true, false }, new boolean[] { true, true });
2538
	}
2539
2540
	public void testSaveAll_CY_True_TF_TF() {
2541
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2542
				true, false }, new boolean[] { true, false });
2543
	}
2544
2545
	public void testSaveAll_CY_True_TF_FT() {
2546
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2547
				true, false }, new boolean[] { false, true });
2548
	}
2549
2550
	public void testSaveAll_CY_True_TF_FF() {
2551
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2552
				true, false }, new boolean[] { false, false });
2553
	}
2554
2555
	public void testSaveAll_CY_True_FT_TT() {
2556
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2557
				false, true }, new boolean[] { true, true });
2558
	}
2559
2560
	public void testSaveAll_CY_True_FT_TF() {
2561
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2562
				false, true }, new boolean[] { true, false });
2563
	}
2564
2565
	public void testSaveAll_CY_True_FT_FT() {
2566
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2567
				false, true }, new boolean[] { false, true });
2568
	}
2569
2570
	public void testSaveAll_CY_True_FF_TT() {
2571
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2572
				false, false }, new boolean[] { true, true });
2573
	}
2574
2575
	public void testSaveAll_CY_True_FF_TF() {
2576
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2577
				false, false }, new boolean[] { true, false });
2578
	}
2579
2580
	public void testSaveAll_CY_True_FF_FT() {
2581
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2582
				false, false }, new boolean[] { false, true });
2583
	}
2584
2585
	public void testSaveAll_CY_True_FF_FF() {
2586
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, true, new boolean[] {
2587
				false, false }, new boolean[] { false, false });
2588
	}
2589
2590
	public void testSaveAll_CY_False_TT_TT() {
2591
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2592
				true, true }, new boolean[] { true, true });
2593
	}
2594
2595
	public void testSaveAll_CY_False_TT_TF() {
2596
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2597
				true, true }, new boolean[] { true, false });
2598
	}
2599
2600
	public void testSaveAll_CY_False_TT_FT() {
2601
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2602
				true, true }, new boolean[] { false, true });
2603
	}
2604
2605
	public void testSaveAll_CY_False_TF_TT() {
2606
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2607
				true, false }, new boolean[] { true, true });
2608
	}
2609
2610
	public void testSaveAll_CY_False_TF_TF() {
2611
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2612
				true, false }, new boolean[] { true, false });
2613
	}
2614
2615
	public void testSaveAll_CY_False_TF_FT() {
2616
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2617
				true, false }, new boolean[] { false, true });
2618
	}
2619
2620
	public void testSaveAll_CY_False_TF_FF() {
2621
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2622
				true, false }, new boolean[] { false, false });
2623
	}
2624
2625
	public void testSaveAll_CY_False_FT_TT() {
2626
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2627
				false, true }, new boolean[] { true, true });
2628
	}
2629
2630
	public void testSaveAll_CY_False_FT_TF() {
2631
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2632
				false, true }, new boolean[] { true, false });
2633
	}
2634
2635
	public void testSaveAll_CY_False_FT_FT() {
2636
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2637
				false, true }, new boolean[] { false, true });
2638
	}
2639
2640
	public void testSaveAll_CY_False_FF_TT() {
2641
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2642
				false, false }, new boolean[] { true, true });
2643
	}
2644
2645
	public void testSaveAll_CY_False_FF_TF() {
2646
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2647
				false, false }, new boolean[] { true, false });
2648
	}
2649
2650
	public void testSaveAll_CY_False_FF_FT() {
2651
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2652
				false, false }, new boolean[] { false, true });
2653
	}
2654
2655
	public void testSaveAll_CY_False_FF_FF() {
2656
		testSaveAll(new Save[] { Save.CANCEL, Save.YES }, false, new boolean[] {
2657
				false, false }, new boolean[] { false, false });
2658
	}
2659
2660
	public void testSaveAll_CN_True_TT_TT() {
2661
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2662
				true, true }, new boolean[] { true, true });
2663
	}
2664
2665
	public void testSaveAll_CN_True_TT_TF() {
2666
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2667
				true, true }, new boolean[] { true, false });
2668
	}
2669
2670
	public void testSaveAll_CN_True_TT_FT() {
2671
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2672
				true, true }, new boolean[] { false, true });
2673
	}
2674
2675
	public void testSaveAll_CN_True_TF_TT() {
2676
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2677
				true, false }, new boolean[] { true, true });
2678
	}
2679
2680
	public void testSaveAll_CN_True_TF_TF() {
2681
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2682
				true, false }, new boolean[] { true, false });
2683
	}
2684
2685
	public void testSaveAll_CN_True_TF_FT() {
2686
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2687
				true, false }, new boolean[] { false, true });
2688
	}
2689
2690
	public void testSaveAll_CN_True_TF_FF() {
2691
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2692
				true, false }, new boolean[] { false, false });
2693
	}
2694
2695
	public void testSaveAll_CN_True_FT_TT() {
2696
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2697
				false, true }, new boolean[] { true, true });
2698
	}
2699
2700
	public void testSaveAll_CN_True_FT_TF() {
2701
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2702
				false, true }, new boolean[] { true, false });
2703
	}
2704
2705
	public void testSaveAll_CN_True_FT_FT() {
2706
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2707
				false, true }, new boolean[] { false, true });
2708
	}
2709
2710
	public void testSaveAll_CN_True_FF_TT() {
2711
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2712
				false, false }, new boolean[] { true, true });
2713
	}
2714
2715
	public void testSaveAll_CN_True_FF_TF() {
2716
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2717
				false, false }, new boolean[] { true, false });
2718
	}
2719
2720
	public void testSaveAll_CN_True_FF_FT() {
2721
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2722
				false, false }, new boolean[] { false, true });
2723
	}
2724
2725
	public void testSaveAll_CN_True_FF_FF() {
2726
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, true, new boolean[] {
2727
				false, false }, new boolean[] { false, false });
2728
	}
2729
2730
	public void testSaveAll_CN_False_TT_TT() {
2731
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2732
				true, true }, new boolean[] { true, true });
2733
	}
2734
2735
	public void testSaveAll_CN_False_TT_TF() {
2736
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2737
				true, true }, new boolean[] { true, false });
2738
	}
2739
2740
	public void testSaveAll_CN_False_TT_FT() {
2741
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2742
				true, true }, new boolean[] { false, true });
2743
	}
2744
2745
	public void testSaveAll_CN_False_TF_TT() {
2746
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2747
				true, false }, new boolean[] { true, true });
2748
	}
2749
2750
	public void testSaveAll_CN_False_TF_TF() {
2751
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2752
				true, false }, new boolean[] { true, false });
2753
	}
2754
2755
	public void testSaveAll_CN_False_TF_FT() {
2756
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2757
				true, false }, new boolean[] { false, true });
2758
	}
2759
2760
	public void testSaveAll_CN_False_TF_FF() {
2761
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2762
				true, false }, new boolean[] { false, false });
2763
	}
2764
2765
	public void testSaveAll_CN_False_FT_TT() {
2766
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2767
				false, true }, new boolean[] { true, true });
2768
	}
2769
2770
	public void testSaveAll_CN_False_FT_TF() {
2771
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2772
				false, true }, new boolean[] { true, false });
2773
	}
2774
2775
	public void testSaveAll_CN_False_FT_FT() {
2776
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2777
				false, true }, new boolean[] { false, true });
2778
	}
2779
2780
	public void testSaveAll_CN_False_FF_TT() {
2781
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2782
				false, false }, new boolean[] { true, true });
2783
	}
2784
2785
	public void testSaveAll_CN_False_FF_TF() {
2786
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2787
				false, false }, new boolean[] { true, false });
2788
	}
2789
2790
	public void testSaveAll_CN_False_FF_FT() {
2791
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2792
				false, false }, new boolean[] { false, true });
2793
	}
2794
2795
	public void testSaveAll_CN_False_FF_FF() {
2796
		testSaveAll(new Save[] { Save.CANCEL, Save.NO }, false, new boolean[] {
2797
				false, false }, new boolean[] { false, false });
2798
	}
2799
2800
	public void testSaveAll_CC_True_TT_TT() {
2801
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2802
				new boolean[] { true, true }, new boolean[] { true, true });
2803
	}
2804
2805
	public void testSaveAll_CC_True_TT_TF() {
2806
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2807
				new boolean[] { true, true }, new boolean[] { true, false });
2808
	}
2809
2810
	public void testSaveAll_CC_True_TT_FT() {
2811
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2812
				new boolean[] { true, true }, new boolean[] { false, true });
2813
	}
2814
2815
	public void testSaveAll_CC_True_TF_TT() {
2816
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2817
				new boolean[] { true, false }, new boolean[] { true, true });
2818
	}
2819
2820
	public void testSaveAll_CC_True_TF_TF() {
2821
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2822
				new boolean[] { true, false }, new boolean[] { true, false });
2823
	}
2824
2825
	public void testSaveAll_CC_True_TF_FT() {
2826
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2827
				new boolean[] { true, false }, new boolean[] { false, true });
2828
	}
2829
2830
	public void testSaveAll_CC_True_TF_FF() {
2831
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2832
				new boolean[] { true, false }, new boolean[] { false, false });
2833
	}
2834
2835
	public void testSaveAll_CC_True_FT_TT() {
2836
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2837
				new boolean[] { false, true }, new boolean[] { true, true });
2838
	}
2839
2840
	public void testSaveAll_CC_True_FT_TF() {
2841
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2842
				new boolean[] { false, true }, new boolean[] { true, false });
2843
	}
2844
2845
	public void testSaveAll_CC_True_FT_FT() {
2846
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2847
				new boolean[] { false, true }, new boolean[] { false, true });
2848
	}
2849
2850
	public void testSaveAll_CC_True_FF_TT() {
2851
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2852
				new boolean[] { false, false }, new boolean[] { true, true });
2853
	}
2854
2855
	public void testSaveAll_CC_True_FF_TF() {
2856
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2857
				new boolean[] { false, false }, new boolean[] { true, false });
2858
	}
2859
2860
	public void testSaveAll_CC_True_FF_FT() {
2861
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2862
				new boolean[] { false, false }, new boolean[] { false, true });
2863
	}
2864
2865
	public void testSaveAll_CC_True_FF_FF() {
2866
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, true,
2867
				new boolean[] { false, false }, new boolean[] { false, false });
2868
	}
2869
2870
	public void testSaveAll_CC_False_TT_TT() {
2871
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2872
				new boolean[] { true, true }, new boolean[] { true, true });
2873
	}
2874
2875
	public void testSaveAll_CC_False_TT_TF() {
2876
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2877
				new boolean[] { true, true }, new boolean[] { true, false });
2878
	}
2879
2880
	public void testSaveAll_CC_False_TT_FT() {
2881
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2882
				new boolean[] { true, true }, new boolean[] { false, true });
2883
	}
2884
2885
	public void testSaveAll_CC_False_TF_TT() {
2886
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2887
				new boolean[] { true, false }, new boolean[] { true, true });
2888
	}
2889
2890
	public void testSaveAll_CC_False_TF_TF() {
2891
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2892
				new boolean[] { true, false }, new boolean[] { true, false });
2893
	}
2894
2895
	public void testSaveAll_CC_False_TF_FT() {
2896
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2897
				new boolean[] { true, false }, new boolean[] { false, true });
2898
	}
2899
2900
	public void testSaveAll_CC_False_TF_FF() {
2901
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2902
				new boolean[] { true, false }, new boolean[] { false, false });
2903
	}
2904
2905
	public void testSaveAll_CC_False_FT_TT() {
2906
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2907
				new boolean[] { false, true }, new boolean[] { true, true });
2908
	}
2909
2910
	public void testSaveAll_CC_False_FT_TF() {
2911
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2912
				new boolean[] { false, true }, new boolean[] { true, false });
2913
	}
2914
2915
	public void testSaveAll_CC_False_FT_FT() {
2916
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2917
				new boolean[] { false, true }, new boolean[] { false, true });
2918
	}
2919
2920
	public void testSaveAll_CC_False_FF_TT() {
2921
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2922
				new boolean[] { false, false }, new boolean[] { true, true });
2923
	}
2924
2925
	public void testSaveAll_CC_False_FF_TF() {
2926
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2927
				new boolean[] { false, false }, new boolean[] { true, false });
2928
	}
2929
2930
	public void testSaveAll_CC_False_FF_FT() {
2931
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2932
				new boolean[] { false, false }, new boolean[] { false, true });
2933
	}
2934
2935
	public void testSaveAll_CC_False_FF_FF() {
2936
		testSaveAll(new Save[] { Save.CANCEL, Save.CANCEL }, false,
2937
				new boolean[] { false, false }, new boolean[] { false, false });
2938
	}
2939
1509
	public void testSwitchWindows() {
2940
	public void testSwitchWindows() {
1510
		// create an application with two windows
2941
		// create an application with two windows
1511
		MApplication application = MApplicationFactory.eINSTANCE
2942
		MApplication application = MApplicationFactory.eINSTANCE
(-)src/org/eclipse/e4/workbench/modeling/EPartService.java (+9 lines)
Lines 163-168 Link Here
163
	 */
163
	 */
164
	public boolean savePart(MSaveablePart part, boolean confirm);
164
	public boolean savePart(MSaveablePart part, boolean confirm);
165
165
166
	/**
167
	 * Saves the contents of all dirty parts and returns whether the operation completed.
168
	 * 
169
	 * @param confirm
170
	 *            <code>true</code> if the user should be prompted prior to saving the changes, and
171
	 *            <code>false</code> to save changes without asking
172
	 * @return <code>true</code> if the operation completed successfully, <code>false</code> if the
173
	 *         user canceled the operation or if an error occurred while saving the changes
174
	 */
166
	public boolean saveAll(boolean confirm);
175
	public boolean saveAll(boolean confirm);
167
176
168
}
177
}
(-)src/org/eclipse/e4/workbench/modeling/ISaveHandler.java (-2 / +2 lines)
Lines 20-27 Link Here
20
		YES, NO, CANCEL
20
		YES, NO, CANCEL
21
	}
21
	}
22
22
23
	public Save promptToSave(MSaveablePart saveablePart);
23
	public Save promptToSave(MSaveablePart dirtyPart);
24
24
25
	public Save[] promptToSave(Collection<MSaveablePart> saveablePart);
25
	public Save[] promptToSave(Collection<MSaveablePart> dirtyParts);
26
26
27
}
27
}
(-)src/org/eclipse/e4/workbench/ui/internal/PartServiceImpl.java (-1 / +33 lines)
Lines 39-44 Link Here
39
import org.eclipse.e4.workbench.modeling.EModelService;
39
import org.eclipse.e4.workbench.modeling.EModelService;
40
import org.eclipse.e4.workbench.modeling.EPartService;
40
import org.eclipse.e4.workbench.modeling.EPartService;
41
import org.eclipse.e4.workbench.modeling.ISaveHandler;
41
import org.eclipse.e4.workbench.modeling.ISaveHandler;
42
import org.eclipse.e4.workbench.modeling.ISaveHandler.Save;
42
import org.eclipse.e4.workbench.ui.IPresentationEngine;
43
import org.eclipse.e4.workbench.ui.IPresentationEngine;
43
import org.eclipse.e4.workbench.ui.UIEvents;
44
import org.eclipse.e4.workbench.ui.UIEvents;
44
import org.eclipse.emf.ecore.EObject;
45
import org.eclipse.emf.ecore.EObject;
Lines 386-391 Link Here
386
	}
387
	}
387
388
388
	public boolean saveAll(boolean confirm) {
389
	public boolean saveAll(boolean confirm) {
389
		return false;
390
		Collection<MSaveablePart> dirtyParts = getDirtyParts();
391
		if (dirtyParts.isEmpty()) {
392
			return true;
393
		}
394
395
		if (confirm) {
396
			List<MSaveablePart> dirtyPartsList = new ArrayList<MSaveablePart>(dirtyParts);
397
			Save[] decisions = saveHandler.promptToSave(dirtyParts);
398
			for (Save decision : decisions) {
399
				if (decision == Save.CANCEL) {
400
					return false;
401
				}
402
			}
403
404
			boolean success = true;
405
			for (int i = 0; i < decisions.length; i++) {
406
				if (decisions[i] == Save.YES) {
407
					if (!savePart(dirtyPartsList.get(i), false)) {
408
						success = false;
409
					}
410
				}
411
			}
412
			return success;
413
		}
414
415
		boolean success = true;
416
		for (MSaveablePart dirtyPart : dirtyParts) {
417
			if (!savePart(dirtyPart, false)) {
418
				success = false;
419
			}
420
		}
421
		return success;
390
	}
422
	}
391
}
423
}

Return to bug 295003