/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html * * 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.dart.tools.core.pub; import junit.framework.TestCase; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Arrays; import java.util.List; public class PubspecModelTest extends TestCase { private static final String YAML_WITH_ERRORS = "name: tss \nauthor: GS <s@gmail.com>\n" + "description: A sample web application \ndependencies: \n browser: any" + " webui: \n git: git://github.com/webui\n ref: polymer"; private static final String YAML_NO_ERRORS = "name: tss \nauthor: GS <s@gmail.com>\n" + "description: A sample web application \ndependencies: \n browser: any" + " webui: \n git: git://github.com/webui\n" + "transformers:\n- polymer:\n entry_points: web/index.html"; private static final String YAML_NO_ERRORS2 = "name: Yess\n" + "description: A sample command-line application\n#dependencies: \n# browser: any"; private static final String YAML_HOSTED_DEP = "name: yess\n" + "dependencies:\n" + " transmogrify: \n" + " hosted:\n name: transmogrify\n url: http://some-package-server.com\n" + " version: '>=1.0.0 <2.0.0'"; // Assert dependency can be added/removed to model public void test_addDependency() { PubspecModel pubspecModel = new PubspecModel(null); DependencyObject dependency = new DependencyObject("unittest"); pubspecModel.add(new DependencyObject[] {dependency}, IModelListener.ADDED); assertTrue(Arrays.asList(pubspecModel.getDependecies()).contains(dependency)); pubspecModel.remove(new DependencyObject[] {dependency}, false); assertTrue(!Arrays.asList(pubspecModel.getDependecies()).contains(dependency)); } public void test_authors() { PubspecModel pubspecModel = new PubspecModel(null); pubspecModel.setValuesFromString(PubYamlUtilsTest.pubspecYamlString2); assertEquals("GS <s@gmail.com>, AS <f@gmail.com>, KM <k@tpl.com>", pubspecModel.getAuthor()); String string = pubspecModel.getContents(); PubspecModel model2 = new PubspecModel(string); assertEquals("GS <s@gmail.com>, AS <f@gmail.com>, KM <k@tpl.com>", model2.getAuthor()); } // Assert that model creation initializes all fields public void test_create() { PubspecModel pubspecModel = new PubspecModel(null); assertNotNull(pubspecModel); assertNotNull(pubspecModel.getName()); assertNotNull(pubspecModel.getAuthor()); assertNotNull(pubspecModel.getDescription()); assertNotNull(pubspecModel.getHomepage()); assertNotNull(pubspecModel.getVersion()); assertNotNull(pubspecModel.getDependecies()); assertNotNull(pubspecModel.getDocumentation()); assertNotNull(pubspecModel.getHomepage()); } public void test_errorGeneration() { final String projectName = "pubspecTest"; IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); try { project.create(null); assertTrue(project.exists()); IFile file = project.getFile("pubspec.yaml"); InputStream is = new ByteArrayInputStream(YAML_WITH_ERRORS.getBytes()); file.create(is, true, null); new PubspecModel(file, YAML_WITH_ERRORS); assertTrue(file.findMarkers(PubspecModel.PUBSPEC_MARKER, false, IResource.DEPTH_ONE).length > 0); is = new ByteArrayInputStream(YAML_NO_ERRORS.getBytes()); file.setContents(is, 0, null); new PubspecModel(file, YAML_NO_ERRORS); assertTrue(file.findMarkers(PubspecModel.PUBSPEC_MARKER, false, IResource.DEPTH_ONE).length == 0); } catch (CoreException e) { } } // Assert that there is no info lost in getContents conversion to yaml public void test_getContents() { PubspecModel pubspecModel1 = new PubspecModel(PubYamlUtilsTest.pubspecYamlString); String pubspecModelString = pubspecModel1.getContents(); PubspecModel pubspecModel2 = new PubspecModel(pubspecModelString); assertEquals(pubspecModel2.getName(), pubspecModel1.getName()); assertEquals(pubspecModel2.getDescription(), pubspecModel1.getDescription()); assertEquals(pubspecModel2.getVersion(), pubspecModel1.getVersion()); assertEquals(pubspecModel2.getAuthor(), pubspecModel1.getAuthor()); assertEquals(pubspecModel2.getHomepage(), pubspecModel1.getHomepage()); assertEquals(pubspecModel2.getDocumentation(), pubspecModel1.getDocumentation()); List<Object> list1 = Arrays.asList(pubspecModel1.getDependecies()); List<Object> list2 = Arrays.asList(pubspecModel2.getDependecies()); assertEquals(list1.size(), list2.size()); assertTrue(list1.containsAll(list2)); } public void test_getContents_hosted() { PubspecModel pubspecModel = new PubspecModel(YAML_HOSTED_DEP); String pubspecModelString = pubspecModel.getContents(); assertTrue(pubspecModelString.contains("hosted:")); assertTrue(pubspecModelString.contains("url:")); assertTrue(pubspecModelString.contains("http://some-package-server.com")); assertTrue(pubspecModelString.contains("name: transmogrify")); } // Assert model can be initialized from pubspec yaml string public void test_initialize() { PubspecModel pubspecModel = new PubspecModel(null); pubspecModel.setValuesFromString(PubYamlUtilsTest.pubspecYamlString); assertEquals("web_components", pubspecModel.getName()); assertEquals("an easy way to build web apps in Dart", pubspecModel.getDescription()); assertEquals("0.0.1", pubspecModel.getVersion()); assertEquals("dart team", pubspecModel.getAuthor()); assertEquals("http://pub.dartlang.org", pubspecModel.getHomepage()); assertEquals("http://www.dartlang.org", pubspecModel.getDocumentation()); assertEquals(8, pubspecModel.getDependecies().length); assertEquals("", pubspecModel.getSdkVersion()); } public void test_initialize2() { PubspecModel pubspecModel = new PubspecModel(null); pubspecModel.setValuesFromString(PubYamlUtilsTest.pubspecYamlString2); assertEquals("web_components", pubspecModel.getName()); assertEquals(">=1.2.3 <2.0.0", pubspecModel.getSdkVersion()); } public void test_initialize3() { PubspecModel pubspecModel = new PubspecModel(null); pubspecModel.setValuesFromString(YAML_NO_ERRORS2); assertEquals("Yess", pubspecModel.getName()); } public void test_removeDependencies() { PubspecModel model1 = new PubspecModel(PubYamlUtilsTest.pubspecYamlString2); assertEquals(model1.getDependecies().length, 2); DependencyObject dep = (DependencyObject) model1.getDependecies()[0]; model1.remove(new DependencyObject[] {dep}, false); PubspecModel model2 = new PubspecModel(model1.getContents()); assertEquals(model2.getDependecies().length, 1); dep = (DependencyObject) model2.getDependecies()[0]; model2.remove(new DependencyObject[] {dep}, false); PubspecModel model3 = new PubspecModel(model2.getContents()); assertEquals(model3.getDependecies().length, 0); } }