// Copyright 2012 Google Inc. All Rights Reserved.
//
// Licensed 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 com.google.collide.codemirror2;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.collide.json.shared.JsonArray;
import com.google.collide.json.shared.JsonStringMap;
import com.google.collide.shared.Pair;
import com.google.collide.shared.util.JsonCollections;
import org.junit.Before;
import org.junit.Test;
/**
* JUnit4 test for {@link TokenUtil}.
*/
public class TokenUtilTest {
private JsonArray<Pair<Integer, String>> modes;
@Before
public void setUp() {
JsonArray<Token> tokens = JsonCollections.createArray();
tokens.add(new Token("html", null, "hhhhhhhh"));
tokens.add(new Token("css", null, "ccc"));
tokens.add(new Token("css", null, "CC"));
tokens.add(new Token("javascript", null, "jjjjj"));
tokens.add(new Token("html", null, "h"));
modes = TokenUtil.buildModes("#", tokens);
}
@Test
public void findModeForColumn() {
assertThrows("Column should be >= 0 but was -1", -1);
// Let the mode at column = 0 be the mode of the first tag.
// This makes sense because visually new line is sufficiently separate
// from the previous line so that whatever is the mode of the first tag
// on this line determines the mode of the first column.
assertEquals("html", TokenUtil.findModeForColumn("html", modes, 0));
assertEquals("html", TokenUtil.findModeForColumn("html", modes, 1));
assertEquals("html", TokenUtil.findModeForColumn("html", modes, 8));
assertEquals("css", TokenUtil.findModeForColumn("html", modes, 9));
assertEquals("css", TokenUtil.findModeForColumn("html", modes, 10));
assertEquals("css", TokenUtil.findModeForColumn("html", modes, 11));
assertEquals("css", TokenUtil.findModeForColumn("html", modes, 12));
assertEquals("css", TokenUtil.findModeForColumn("html", modes, 13));
assertEquals("javascript", TokenUtil.findModeForColumn("html", modes, 14));
assertEquals("javascript", TokenUtil.findModeForColumn("html", modes, 16));
assertEquals("html", TokenUtil.findModeForColumn("html", modes, 19));
assertEquals("html", TokenUtil.findModeForColumn("html", modes, 100));
assertEquals("html", TokenUtil.findModeForColumn("html",
JsonCollections.<Pair<Integer, String>>createArray(), 0));
assertEquals("html", TokenUtil.findModeForColumn("html",
JsonCollections.<Pair<Integer, String>>createArray(), 1));
}
@Test
public void buildModes() {
assertEquals(4, modes.size());
assertEquals(0, modes.get(0).first.intValue());
assertEquals("html", modes.get(0).second);
assertEquals(8, modes.get(1).first.intValue());
assertEquals("css", modes.get(1).second);
assertEquals(13, modes.get(2).first.intValue());
assertEquals("javascript", modes.get(2).second);
assertEquals(18, modes.get(3).first.intValue());
assertEquals("html", modes.get(3).second);
assertTrue(TokenUtil.buildModes("html", JsonCollections.<Token>createArray()).isEmpty());
}
@Test
public void addPlaceholders() {
JsonStringMap<JsonArray<Token>> splitTokenMap = JsonCollections.<JsonArray<Token>>createMap();
splitTokenMap.put("a", JsonCollections.<Token>createArray());
splitTokenMap.put("b", JsonCollections.<Token>createArray());
splitTokenMap.put("c", JsonCollections.<Token>createArray());
TokenUtil.addPlaceholders("c", splitTokenMap, 4);
assertEquals(3, splitTokenMap.size());
assertEquals(1, splitTokenMap.get("a").size());
Token tokenA = splitTokenMap.get("a").get(0);
assertEquals(TokenType.WHITESPACE, tokenA.getType());
assertEquals("a", tokenA.getMode());
assertEquals(" ", tokenA.getValue());
assertEquals(1, splitTokenMap.get("b").size());
Token tokenB = splitTokenMap.get("b").get(0);
assertEquals(TokenType.WHITESPACE, tokenB.getType());
assertEquals("b", tokenB.getMode());
assertEquals(" ", tokenB.getValue());
assertEquals(0, splitTokenMap.get("c").size());
}
private void assertThrows(String expectedMessage, int column) {
try {
TokenUtil.findModeForColumn("html", modes, column);
fail("Expected to throw an exception");
} catch (IllegalArgumentException e) {
// Expected exception
assertEquals(expectedMessage, e.getMessage());
}
}
}