/soy-template-plugin/src/test/java/com/atlassian/soy/impl/modules/GlobalFunctionsModuleTest.java

https://bitbucket.org/mrdon/atlassian-soy-templates · Java · 100 lines · 83 code · 14 blank · 3 comment · 0 complexity · 08e1a17a5f5114433ef51183652abbe2 MD5 · raw file

  1. package com.atlassian.soy.impl.modules;
  2. import com.atlassian.plugin.PluginAccessor;
  3. import com.atlassian.plugin.module.ModuleFactory;
  4. import com.atlassian.soy.impl.data.SoyDataConverter;
  5. import com.atlassian.soy.renderer.JsExpression;
  6. import com.atlassian.soy.renderer.SoyClientFunction;
  7. import com.atlassian.soy.renderer.SoyDataMapper;
  8. import com.atlassian.soy.renderer.SoyFunctionModuleDescriptor;
  9. import com.google.common.collect.ImmutableSet;
  10. import com.google.inject.Guice;
  11. import com.google.inject.Injector;
  12. import com.google.template.soy.SoyFileSet;
  13. import com.google.template.soy.SoyModule;
  14. import com.google.template.soy.jssrc.SoyJsSrcOptions;
  15. import org.junit.Before;
  16. import org.junit.Test;
  17. import org.junit.runner.RunWith;
  18. import org.mockito.Mock;
  19. import org.mockito.runners.MockitoJUnitRunner;
  20. import java.util.Collections;
  21. import java.util.List;
  22. import java.util.Set;
  23. import static junit.framework.Assert.assertEquals;
  24. import static org.mockito.Matchers.anyString;
  25. import static org.mockito.Matchers.eq;
  26. import static org.mockito.Mockito.when;
  27. /**
  28. * Tests the GlobalFunctionsModule creates working functions from the pluginAccessor.
  29. */
  30. @RunWith(MockitoJUnitRunner.class)
  31. public class GlobalFunctionsModuleTest
  32. {
  33. private static final String FOO_TEMPLATE_WITH_FUNC_OUTPUT = "// This file was automatically generated from foo.soy.\n" +
  34. "// Please don't edit this file by hand.\n" +
  35. "\n" +
  36. "if (typeof foo == 'undefined') { var foo = {}; }\n" +
  37. "\n" +
  38. "\n" +
  39. "foo.bar = function(opt_data, opt_sb) {\n" +
  40. " var output = opt_sb || new soy.StringBuilder();\n" +
  41. " output.append(soy.$$escapeHtml(MYJS));\n" +
  42. " return opt_sb ? '' : output.toString();\n" +
  43. "};\n";
  44. @Mock private PluginAccessor pluginAccessor;
  45. @Mock private ModuleFactory moduleFactory;
  46. private GlobalFunctionsModule globalFunctionsModule;
  47. @Before
  48. public void setUp()
  49. {
  50. SoyDataConverter soyDataConverter = new SoyDataConverter(Collections.<SoyDataMapper>emptyList());
  51. globalFunctionsModule = new GlobalFunctionsModule(soyDataConverter, pluginAccessor);
  52. }
  53. @Test
  54. public void testGlobalFunctionWorks()
  55. {
  56. SoyFunctionModuleDescriptor fooFunctionDescriptor = new SoyFunctionModuleDescriptor(moduleFactory);
  57. when(moduleFactory.createModule(anyString(), eq(fooFunctionDescriptor))).thenReturn(makeJsFunc("foo"));
  58. fooFunctionDescriptor.enabled();
  59. when(pluginAccessor.getEnabledModuleDescriptorsByClass(SoyFunctionModuleDescriptor.class)).thenReturn(Collections.singletonList(fooFunctionDescriptor));
  60. Injector injector = Guice.createInjector(globalFunctionsModule, new SoyModule());
  61. SoyFileSet.Builder builder = injector.getInstance(SoyFileSet.Builder.class);
  62. List<String> out = builder.add("{namespace foo}\n/** */\n{template .bar}\n{foo()}\n{/template}\n", "foo.soy").build().compileToJsSrc(new SoyJsSrcOptions(), null);
  63. assertEquals(FOO_TEMPLATE_WITH_FUNC_OUTPUT, out.get(0));
  64. }
  65. private SoyClientFunction makeJsFunc(final String functionName)
  66. {
  67. return new SoyClientFunction()
  68. {
  69. @Override
  70. public String getName()
  71. {
  72. return functionName;
  73. }
  74. @Override
  75. public JsExpression generate(JsExpression... args)
  76. {
  77. return new JsExpression("MYJS");
  78. }
  79. @Override
  80. public Set<Integer> validArgSizes()
  81. {
  82. return ImmutableSet.of(0);
  83. }
  84. };
  85. }
  86. }