/** * Copyright (c) 2013-2016 Angelo ZERR. * 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://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.server.protocol.angular; import org.junit.Assert; import org.junit.Test; import tern.TernException; import tern.angular.AngularType; import tern.angular.protocol.definition.TernAngularDefinitionQuery; import tern.server.protocol.TernDoc; import tern.server.protocol.definition.MockTernDefinitionCollector; /** * Tests with tern angular module definition. * */ public abstract class AbstractAngularModelDefinitionTest extends AbstractTernServerAngularTest { @Test public void todoText() throws TernException { TernDoc doc = createDocForDefinitionTodoText(); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(216, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(224, collector.getEnd().longValue()); } @Test public void todoTextDefinedInScopeToo() throws TernException { TernDoc doc = createDocForDefinitionTodoText(); ((TernAngularDefinitionQuery) doc.getQuery()).getScope().getProps() .add("todoText", "todoText"); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(216, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(224, collector.getEnd().longValue()); } @Test public void todoTextBeforeEnd() throws TernException { TernDoc doc = createDocForDefinitionTodoText(); doc.getQuery().setEnd(8); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(216, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(224, collector.getEnd().longValue()); } @Test public void todoTextAfterEnd() throws TernException { TernDoc doc = createDocForDefinitionTodoText(); doc.getQuery().setEnd(9); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNull(collector.getFile()); } private TernDoc createDocForDefinitionTodoText() { TernDoc doc = createFile(); TernAngularDefinitionQuery query = new TernAngularDefinitionQuery( AngularType.model); query.getScope().getControllers().add("TodoCtrl"); query.setExpression("todoText"); doc.setQuery(query); return doc; } @Test public void todos() throws TernException { TernDoc doc = createDocForDefinitionTodos(); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(35, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(40, collector.getEnd().longValue()); } private TernDoc createDocForDefinitionTodos() { TernDoc doc = createFile(); TernAngularDefinitionQuery query = new TernAngularDefinitionQuery( AngularType.model); query.getScope().getControllers().add("TodoCtrl"); query.setExpression("todos.length"); query.setEnd(2); doc.setQuery(query); return doc; } @Test public void todo() throws TernException { TernDoc doc = createDocForDefinitionTodo(); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(172, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(206, collector.getEnd().longValue()); } private TernDoc createDocForDefinitionTodo() { TernDoc doc = createFile(); TernAngularDefinitionQuery query = new TernAngularDefinitionQuery( AngularType.model); query.getScope().getControllers().add("TodoCtrl"); query.getScope().addRepeat("todo in todos"); query.setExpression("todo."); query.setEnd(2); doc.setQuery(query); return doc; } @Test public void todoDone() throws TernException { TernDoc doc = createDocForDefinitionTodoDone(); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(195, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(199, collector.getEnd().longValue()); } private TernDoc createDocForDefinitionTodoDone() { TernDoc doc = createFile(); TernAngularDefinitionQuery query = new TernAngularDefinitionQuery( AngularType.model); query.getScope().getControllers().add("TodoCtrl"); query.getScope().addRepeat("todo in todos"); query.setExpression("todo.done"); query.setEnd(6); doc.setQuery(query); return doc; } private TernDoc createFile() { String name = "myfile.js"; String text = "function TodoCtrl($scope) {\n" + "$scope.todos = [" + "\n{text:'learn angular', done:true}," + "\n{text:'build an angular app', done:false}];" + "\n$scope.addTodo = function() {" + "\n$scope.todos.push({text:$scope.todoText, done:false});" + "\n$scope.todoText = '';" + "\n};" + "\n}"; TernDoc doc = new TernDoc(); doc.addFile(name, text, null, null); return doc; } @Test public void saveModule() throws TernException { TernDoc doc = createDocForDefinitionWithModule(); MockTernDefinitionCollector collector = new MockTernDefinitionCollector(); server.request(doc, collector); Assert.assertNotNull(collector.getFile()); Assert.assertEquals("myfile.js", collector.getFile()); Assert.assertNotNull(collector.getStart()); Assert.assertEquals(85, collector.getStart().longValue()); Assert.assertNotNull(collector.getEnd()); Assert.assertEquals(89, collector.getEnd().longValue()); } private TernDoc createDocForDefinitionWithModule() { TernDoc doc = createFileWithModule(); TernAngularDefinitionQuery query = new TernAngularDefinitionQuery( AngularType.model); query.getScope().setModule("MyApp"); query.getScope().getControllers().add("SomeCtrl"); query.setExpression("save"); query.setEnd(1); doc.setQuery(query); return doc; } private TernDoc createFileWithModule() { String name = "myfile.js"; String text = "angular.module('MyApp', [])" + "\n.controller('SomeCtrl', function($scope, $http) {" + "\n$scope.save = function() {};" + "\n$http. // <-- you'll have completions now" + "\n});"; TernDoc doc = new TernDoc(); doc.addFile(name, text, null, null); return doc; } }