summaryrefslogtreecommitdiffstats
path: root/tests/src/org/aspectj/systemtest/incremental/tools/IncrementalOutputLocationManagerTests.java
blob: 0c13b154bac8bf15f9fe1a7e960092a6b4711cdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/********************************************************************
 * Copyright (c) 2006 Contributors. All rights reserved. 
 * This program and the accompanying materials are made available 
 * under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution and is available at 
 * http://eclipse.org/legal/epl-v10.html 
 *  
 * Contributors: IBM Corporation - initial API and implementation 
 * 				 Helen Hawkins   - initial version
 *******************************************************************/
package org.aspectj.systemtest.incremental.tools;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.aspectj.ajde.core.IOutputLocationManager;

/**
 * OutputLocationManger tests which check whether the correct type of build has happened.
 */
public class IncrementalOutputLocationManagerTests extends AbstractMultiProjectIncrementalAjdeInteractionTestbed {

	public void testPr166580() {
		initialiseProject("PR166580");
		configureOutputLocationManager("PR166580", new MyOutputLocationManager("PR166580", 2));
		build("PR166580");
		checkWasFullBuild();
		alter("PR166580", "inc1");
		build("PR166580");
		checkWasntFullBuild();
	}

	/**
	 * Will send output from src dir 'srcX' to directory 'binX'
	 */
	private class MyOutputLocationManager implements IOutputLocationManager {

		private String projectDir;
		private int numberOfSrcDirs;
		private List allOutputDirs;

		public MyOutputLocationManager(String projectName, int numberOfSrcDirs) {
			projectDir = getWorkingDir() + File.separator + projectName;
			this.numberOfSrcDirs = numberOfSrcDirs;
		}

		public void reportFileWrite(String outputfile, int filetype) {
		}

		public void reportFileRemove(String outputfile, int filetype) {
		}
		
		public Map getInpathMap() {
			return Collections.EMPTY_MAP;
		}

		public File getOutputLocationForClass(File compilationUnit) {
			String path = compilationUnit.getAbsolutePath();
			int index = path.indexOf("src");
			String number = path.substring(index + 3, index + 4);
			File ret = new File(projectDir + File.separator + "bin" + number);
			if (!ret.exists()) {
				ret.mkdirs();
			}
			return ret;
		}

		public File getOutputLocationForResource(File resource) {
			return getOutputLocationForClass(resource);
		}

		public List getAllOutputLocations() {
			if (allOutputDirs == null) {
				allOutputDirs = new ArrayList();
				for (int i = 0; i < numberOfSrcDirs + 1; i++) {
					File f = null;
					if (i == 0) {
						f = new File(projectDir + File.separator + "bin");
					} else {
						f = new File(projectDir + File.separator + "bin" + i);
					}
					allOutputDirs.add(f);
				}
			}
			return allOutputDirs;
		}

		public File getDefaultOutputLocation() {
			return new File(projectDir + File.separator + "bin");
		}

		public String getSourceFolderForFile(File sourceFile) {
			return null;
		}

		public int discoverChangesSince(File dir, long buildtime) {
			// TODO Auto-generated method stub
			return 0;
		}

	}

}