public JsResponse execute(JsRequest jsRequest) throws JsException { JsResponseBuilder resp = new JsResponseBuilder(); jsProcessorRegistry.process(jsRequest, resp); final JsResponse response = resp.build(); if (response.isError()) { throw new JsException(response.getStatusCode(), response.toErrorString()); } return response; } }
/** * Compile content in the inbound JsResponseBuilder. * TODO: Convert JsCompiler to take JsResponseBuilder directly rather than Iterable<JsContent> * @throws JsException */ public boolean process(JsRequest request, JsResponseBuilder builder) throws JsException { Iterable<JsContent> jsContents = builder.build().getAllJsContent(); for (JsContent jsc : jsContents) { FeatureBundle bundle = jsc.getFeatureBundle(); if (bundle != null) { builder.appendExterns(bundle.getApis(ApiDirective.Type.JS, true)); } } JsResponse result = compiler.compile(request.getJsUri(), jsContents, builder.build().getExterns()); builder.clearJs().appendAllJs(result.getAllJsContent()); builder.setStatusCode(result.getStatusCode()); builder.addErrors(result.getErrors()); int refresh = result.getCacheTtlSecs(); if (refresh > 0) { // Allow ttl overwrite by compiler builder.setCacheTtlSecs(refresh); } return true; }
@Test public void testExterns() throws Exception { builder.appendExtern("b"); builder.appendExtern("b"); builder.appendExtern("c.d"); builder.appendExtern("c.d"); builder.appendExtern("e.prototype.f"); builder.appendExtern("e.prototype.f"); builder.appendRawExtern("var a"); String eee = builder.build().getExterns(); assertEquals( "var a;\n" + "var b = {};\n" + "var c = {};\nc.d = {};\n" + "var e = {};\ne.prototype.f = {};\n", builder.build().getExterns()); }
private JsResponse returnErrorResult( JsResponseBuilder builder, int statusCode, List<String> messages) { builder.setStatusCode(statusCode); builder.addErrors(messages); JsResponse result = builder.build(); return result; }
public JsResponse compile(JsUri jsUri, Iterable<JsContent> content, String externs) { return new JsResponseBuilder().appendAllJs(content).build(); }
@Test public void processWithFeaturesAndTexts() throws Exception { JsUri jsUri = mockJsUri(JsCompileMode.CONCAT_COMPILE_EXPORT_ALL); JsRequest jsRequest = new JsRequest(jsUri, null, false, null); JsResponseBuilder jsBuilder = new JsResponseBuilder(); jsBuilder.appendJs(textJsContent1); jsBuilder.appendJs(featureJsContent1); jsBuilder.appendJs(featureJsContent2); jsBuilder.appendJs(textJsContent2); jsBuilder.appendJs(featureJsContent3); boolean actualReturnCode = processor.process(jsRequest, jsBuilder); assertTrue(actualReturnCode); assertEquals(EXPORT_JS_DEB + TEXT_CONTENT_1 + FEATURE_CONTENT_1 + EXPORT_STRING_1 + FEATURE_CONTENT_2 + EXPORT_STRING_2 + TEXT_CONTENT_2 + FEATURE_CONTENT_3 + EXPORT_STRING_3, jsBuilder.build().toJsString()); } }
@Test public void compilerTtlIsUsed() throws Exception { JsUri jsUri = control.createMock(JsUri.class); JsResponseBuilder builder = new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200) .appendJs("content1:", "source1"); JsResponse outputResponse = new JsResponseBuilder().setCacheTtlSecs(789) .appendJs("content3", "s3").build(); JsRequest request = control.createMock(JsRequest.class); expect(request.getJsUri()).andReturn(jsUri); expect(compiler.compile(same(jsUri), eq(builder.build().getAllJsContent()), isA(String.class))).andReturn(outputResponse); control.replay(); boolean status = processor.process(request, builder); control.verify(); JsResponse compResult = builder.build(); assertEquals(200, compResult.getStatusCode()); assertEquals(789, compResult.getCacheTtlSecs()); }
@Test public void testGetJsData() throws Exception { List<String> fields = ImmutableList.of("jscontent"); List<String> features = ImmutableList.of("rpc"); Uri resUri = Uri.parse("http://server.com/gadgets/js/rpc"); Capture<JsUri> uriCapture = new Capture<JsUri>(); String jsContent = "var a;"; String onload = "do this"; String repository = "v01"; expect(jsUriManager.makeExternJsUri(capture(uriCapture))).andReturn(resUri); expect(jsPipeline.execute(EasyMock.isA(JsRequest.class))).andReturn( new JsResponseBuilder().appendJs(jsContent, "js").setProxyCacheable(true).build()); GadgetsHandlerApi.JsRequest request = createJsRequest(FakeProcessor.SPEC_URL.toString(), CONTAINER, fields, features, repository); expect(request.getOnload()).andStubReturn(onload); expect(request.getContext()).andStubReturn(GadgetsHandlerApi.RenderingContext.CONTAINER); replay(); GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request); JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(), features, null, onload, false, false, RenderingContext.CONTAINER, null, repository); assertEquals(expectedUri, uriCapture.getValue()); assertNull(response.getJsUrl()); assertEquals(jsContent, response.getJsContent()); assertEquals(timeSource.currentTimeMillis() + HttpUtil.getDefaultTtl() * 1000, response .getExpireTimeMs().longValue()); verify(); }
public boolean process(JsRequest jsRequest, JsResponseBuilder builder) { if (!jsRequest.getJsUri().cajoleContent()) { ImmutableList.Builder<JsContent> listBuilder = ImmutableList.builder(); for (JsContent js : builder.build().getAllJsContent()) { if (!isCajole(js)) { listBuilder.add(js); } } builder.clearJs().appendAllJs(listBuilder.build()); } return true; }
public JsResponse compile(JsUri jsUri, Iterable<JsContent> content, String externs) { JsResponseBuilder builder = new JsResponseBuilder(); builder.appendJs(compiled.toString(), "[compiled]"); builder.clearExterns().appendRawExtern(exports.toString()); return builder.build();
private JsResponseBuilder newBuilder(JsContent... contents) { response = new JsResponse(Lists.newArrayList(contents), -1, -1, false, ERRORS, null); return new JsResponseBuilder(response); }
@Test public void skipsEmptyContent() throws Exception { builder.appendJs("number 1", "num1"); builder.appendJs("", "num2"); builder.appendJs("number 3", "num3"); builder.prependJs("number 4", "num4"); builder.prependJs("", "num5"); Iterator<JsContent> allJsContent = builder.build().getAllJsContent().iterator(); assertEquals("num4", allJsContent.next().getSource()); assertEquals("num1", allJsContent.next().getSource()); assertEquals("num3", allJsContent.next().getSource()); assertFalse(allJsContent.hasNext()); } }
@Test public void testWithHint() throws Exception { EasyMock.expect(jsUri.getOnload()).andReturn(null); EasyMock.expect(jsUri.isNohint()).andReturn(false); control.replay(); assertTrue(processor.process(request, response)); assertEquals("", response.build().toJsString()); control.verify(); } }
private JsResponseBuilder prepareRequestReturnBuilder(RenderingContext ctx) { expect(jsUri.getContext()).andReturn(ctx); expect(jsUri.getContainer()).andReturn(CONTAINER); expect(jsUri.isDebug()).andReturn(false); expect(jsUri.getRepository()).andReturn(null); expect(request.getJsUri()).andReturn(jsUri); return new JsResponseBuilder().appendJs(BASE_CODE, "source"); }
/** * Helper to append a bunch of JS. */ public JsResponseBuilder appendAllJs(Iterable<JsContent> jsBundle) { for (JsContent content : jsBundle) { appendJs(content); } return this; }
private void checkResponse(boolean proxyCacheable, int expectedTtl, String jsString, String... externs) { assertEquals(proxyCacheable, response.isProxyCacheable()); assertEquals(expectedTtl, response.getCacheTtlSecs()); assertEquals(jsString, response.build().toJsString()); for (String extern : externs) { assertTrue(response.build().getExterns().contains(extern)); } } }
for (FeatureBundle bundle : loadedBundles) { loadedFeatures.add(bundle.getName()); builder.appendExterns(bundle.getApis(ApiDirective.Type.JS, true)); builder.appendExterns(bundle.getApis(ApiDirective.Type.JS, false)); continue; builder.appendAllJs(compiler.getJsContent(jsUri, bundle)); for (FeatureResource featureResource : bundle.getResources()) { isProxyCacheable = isProxyCacheable && featureResource.isProxyCacheable(); builder.setProxyCacheable(isProxyCacheable); UriStatus uriStatus = jsUri.getStatus(); setResponseCacheTtl(builder, uriStatus != null ? uriStatus : UriStatus.VALID_UNVERSIONED);
public boolean process(JsRequest request, JsResponseBuilder builder) { if (request.isInCache() && request.getJsUri().getStatus() == UriStatus.VALID_VERSIONED) { builder.setStatusCode(HttpServletResponse.SC_NOT_MODIFIED); builder.setCacheTtlSecs(versionedMaxAge); return false; } return true; }