/*
 * Copyright 2012 Google Inc.
 *
 * 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.template.soy.soytree;

import com.google.template.soy.SoyFileSetParserBuilder;
import com.google.template.soy.base.internal.LegacyInternalSyntaxException;

import junit.framework.TestCase;

/**
 * Unit tests for SoySyntaxExceptionUtils.
 *
 */
public final class SoySyntaxExceptionUtilsTest extends TestCase {


  public void testCreateWithNode() {

    String testFileContent =
        "{namespace boo autoescape=\"deprecated-noncontextual\"}\n" +
        "\n" +
        "/** @param goo */\n" +
        "{template .foo}\n" +
        "  {$goo}\n" +
        "{/template}\n";

    SoyFileSetNode soyTree =
        SoyFileSetParserBuilder.forFileContents(testFileContent).parse().fileSet();

    String message = "Some error happened.";
    PrintNode pn = (PrintNode) soyTree.getChild(0).getChild(0).getChild(0);
    LegacyInternalSyntaxException sse =
        LegacyInternalSyntaxException.createWithMetaInfo(message, pn.getSourceLocation());
    assertTrue(sse.getMessage().contains(message));
    assertEquals("no-path", sse.getSourceLocation().getFilePath());
  }


  public void testAssociateNode() {

    String message = "Some error happened.";
    LegacyInternalSyntaxException sse =
        LegacyInternalSyntaxException.createWithoutMetaInfo(message);

    String testFileContent =
        "{namespace boo autoescape=\"deprecated-noncontextual\"}\n" +
        "\n" +
        "/** @param goo */\n" +
        "{template .foo}\n" +
        "  {$goo}\n" +
        "{/template}\n";
    SoyFileSetNode soyTree =
        SoyFileSetParserBuilder.forFileContents(testFileContent).parse().fileSet();
    PrintNode pn = (PrintNode) soyTree.getChild(0).getChild(0).getChild(0);

    // Before.
    assertTrue(sse.getMessage().contains(message));
    assertEquals("unknown", sse.getSourceLocation().getFilePath());

    sse.associateMetaInfo(pn.getSourceLocation(), null, null);

    // After.
    assertTrue(sse.getMessage().contains(message));
    assertEquals("no-path", sse.getSourceLocation().getFilePath());
  }

}
