001: /*BEGIN_COPYRIGHT_BLOCK
002: *
003: * Copyright (c) 2001-2007, JavaPLT group at Rice University (javaplt@rice.edu)
004: * All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are met:
008: * * Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * * Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * * Neither the names of DrJava, the JavaPLT group, Rice University, nor the
014: * names of its contributors may be used to endorse or promote products
015: * derived from this software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
018: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
019: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
020: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
021: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
022: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
023: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
024: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
025: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
026: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: *
029: * This software is Open Source Initiative approved Open Source Software.
030: * Open Source Initative Approved is a trademark of the Open Source Initiative.
031: *
032: * This file is part of DrJava. Download the current version of this project
033: * from http://www.drjava.org/ or http://sourceforge.net/projects/drjava/
034: *
035: * END_COPYRIGHT_BLOCK*/
036:
037: package edu.rice.cs.drjava.model.repl;
038:
039: import edu.rice.cs.drjava.DrJavaTestCase;
040: import edu.rice.cs.drjava.model.GlobalModel;
041: import edu.rice.cs.drjava.ui.InteractionsPane;
042: import edu.rice.cs.drjava.ui.MainFrame;
043: import edu.rice.cs.util.text.EditDocumentException;
044:
045: import java.io.File;
046:
047: /** Tests the functionality of the InteractionsDJDocument. */
048: public final class InteractionsDJDocumentTest extends DrJavaTestCase {
049:
050: protected InteractionsDJDocument _adapter;
051: protected InteractionsModel _model;
052: protected InteractionsDocument _doc;
053: protected InteractionsPane _pane;
054: protected MainFrame mf;
055:
056: /** Initialize fields for each test. */
057: protected void setUp() throws Exception {
058: super .setUp();
059: mf = new MainFrame();
060: GlobalModel gm = mf.getModel();
061: _model = gm.getInteractionsModel();
062: _adapter = gm.getSwingInteractionsDocument();
063: _doc = gm.getInteractionsDocument();
064: }
065:
066: private boolean _interpreterRestarted = false;
067:
068: /** Tests that the styles list is updated and reset properly */
069: public void testStylesListContentAndReset()
070: throws EditDocumentException, InterruptedException {
071: /* The banner and the prompt are inserted in the styles list when the document is constructed; the corresponding
072: offsets are computed in the tests below.
073: */
074:
075: final Object _restartLock = new Object();
076:
077: assertEquals("StylesList before insert should contain 2 pairs",
078: 2, _adapter.getStylesList().size());
079:
080: int blen = _model.getStartUpBanner().length();
081:
082: /** Elt1, Elt2 are first two elements pushed on the StylesList stack */
083: String styleElt1 = "((0, " + blen + "), object.return.style)";
084: String styleElt2 = "((" + blen + ", " + (blen + 2)
085: + "), default)";
086:
087: assertEquals(
088: "The first element pushed on StylesList before insertion should be",
089: styleElt1, _adapter.getStylesList().get(1).toString());
090: assertEquals(
091: "The second element pushed on StylesList before insertion should be",
092: styleElt2, _adapter.getStylesList().get(0).toString());
093:
094: // Insert some text
095: _doc.insertText(_doc.getLength(), "5",
096: InteractionsDocument.NUMBER_RETURN_STYLE);
097:
098: /* Third element pushed StylesList stack before reset */
099: String styleElt3 = "((" + (blen + 2) + ", " + (blen + 3)
100: + "), number.return.style)";
101:
102: assertEquals("StylesList before reset should contain 3 pairs",
103: 3, _adapter.getStylesList().size());
104:
105: assertEquals(
106: "The first element pushed on StylesList before reset should be",
107: styleElt1, _adapter.getStylesList().get(2).toString());
108: assertEquals(
109: "The second element pushed on StylesList before reset should be",
110: styleElt2, _adapter.getStylesList().get(1).toString());
111: assertEquals(
112: "The last element pushed on StylesList before reset should be",
113: styleElt3, _adapter.getStylesList().get(0).toString());
114:
115: // System.err.println("Doc text: " + _adapter.getText());
116: // System.err.println("The styles list is: " + _adapter.getStylesList());
117: // System.err.println("The length of the startUp banner is: " + InteractionsModel.getStartUpBanner().length());
118:
119: /* Reset interactions and wait until it completes */
120:
121: InteractionsListener restartCommand = new DummyInteractionsListener() {
122: public void interpreterReady(File wd) {
123: synchronized (_restartLock) {
124: _interpreterRestarted = true;
125: _restartLock.notify();
126: }
127: }
128: };
129: _model.addListener(restartCommand);
130:
131: // Reset should clear
132: _model.setWaitingForFirstInterpreter(false);
133:
134: synchronized (_restartLock) {
135: _interpreterRestarted = false;
136: }
137:
138: // Reset the interactions pane, restarting the interpreter
139: File f = _model.getWorkingDirectory();
140: _model.resetInterpreter(f);
141:
142: //. Wait until interpreter has restarted
143: synchronized (_restartLock) {
144: while (!_interpreterRestarted)
145: _restartLock.wait();
146: }
147: _model.removeListener(restartCommand);
148:
149: // System.err.println("Doc text: " + _adapter.getText());
150: // System.err.println("Text length: " + _adapter.getLength());
151: // System.err.println("The styles list is: " + _adapter.getStylesList());
152:
153: assertEquals("StylesList after reset should contain 2 pairs",
154: 2, _adapter.getStylesList().size());
155:
156: assertEquals(
157: "The first element pushed on StylesList after reset should be",
158: styleElt1, _adapter.getStylesList().get(1).toString());
159: assertEquals(
160: "The second element pushed on StylesList after reset should be",
161: styleElt2, _adapter.getStylesList().get(0).toString());
162:
163: }
164:
165: /**
166: * Tests that a null style is not added to the list. Fix for bug #995719
167: */
168: public void testCannotAddNullStyleToList()
169: throws EditDocumentException {
170: // the banner and the prompt are inserted in the styles list when the document is constructed
171: assertEquals("StylesList before insert should contain 2 pairs",
172: 2, _adapter.getStylesList().size());
173:
174: // Insert some text
175: _doc.insertText(_doc.getLength(), "5",
176: InteractionsDocument.NUMBER_RETURN_STYLE);
177:
178: assertEquals("StylesList should contain 3 pairs", 3, _adapter
179: .getStylesList().size());
180:
181: // Insert some text with a null style
182: _doc.insertText(_doc.getLength(), "6", null);
183:
184: assertEquals(
185: "StylesList should still contain 3 pairs - null string should not have been inserted",
186: 3, _adapter.getStylesList().size());
187: }
188: }
|