| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * 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.android.manifmerger; |
| |
| import static com.android.manifmerger.MergingReport.Record.Severity; |
| import static com.android.manifmerger.PlaceholderHandler.KeyBasedValueResolver; |
| |
| import com.android.ide.common.blame.SourceFile; |
| import com.android.utils.ILogger; |
| import com.google.common.base.Optional; |
| import com.google.common.collect.ImmutableList; |
| |
| import junit.framework.TestCase; |
| |
| import org.mockito.Mock; |
| import org.mockito.Mockito; |
| import org.mockito.MockitoAnnotations; |
| import org.w3c.dom.Element; |
| |
| /** |
| * Tests for the {@link com.android.manifmerger.MergingReport} class |
| */ |
| public class MergingReportTest extends TestCase { |
| |
| @Mock ILogger mLoggerMock; |
| @Mock Element mElement; |
| SourceFile mSourceLocation = new SourceFile("location"); |
| @Mock KeyResolver<String> mKeyResolver; |
| @Mock KeyBasedValueResolver<ManifestMerger2.SystemProperty> mPropertyResolver; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| MockitoAnnotations.initMocks(this); |
| } |
| |
| public void testJustError() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.ERROR,"Something bad happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.ERROR, mergingReport.getResult()); |
| } |
| |
| public void testJustWarning() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.WARNING, "Something weird happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.WARNING, mergingReport.getResult()); |
| } |
| |
| public void testJustInfo() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.INFO, "merging info") |
| .build(); |
| |
| assertEquals(MergingReport.Result.SUCCESS, mergingReport.getResult()); |
| } |
| |
| |
| public void testJustInfoAndWarning() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.INFO, "merging info") |
| .addMessage(mSourceLocation,0, 0, Severity.WARNING, "Something weird happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.WARNING, mergingReport.getResult()); |
| } |
| |
| public void testJustInfoAndError() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.INFO, "merging info") |
| .addMessage(mSourceLocation,0, 0, Severity.ERROR, "something bad happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.ERROR, mergingReport.getResult()); |
| } |
| |
| public void testJustWarningAndError() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.WARNING, "something weird happened") |
| .addMessage(mSourceLocation,0, 0, Severity.ERROR, "something bad happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.ERROR, mergingReport.getResult()); |
| } |
| public void testAllTypes() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,0, 0, Severity.INFO, "merging info") |
| .addMessage(mSourceLocation,0, 0, Severity.WARNING, "something weird happened") |
| .addMessage(mSourceLocation,0, 0, Severity.ERROR, "something bad happened") |
| .build(); |
| |
| assertEquals(MergingReport.Result.ERROR, mergingReport.getResult()); |
| } |
| |
| public void testLogging() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMessage(mSourceLocation,1, 1, Severity.INFO, "merging info") |
| .addMessage(mSourceLocation,1, 1, Severity.WARNING, "something weird happened") |
| .addMessage(mSourceLocation,1, 1, Severity.ERROR, "something bad happened") |
| .build(); |
| |
| mergingReport.log(mLoggerMock); |
| Mockito.verify(mLoggerMock).verbose("location:1:1 Info:\n\tmerging info"); |
| Mockito.verify(mLoggerMock).warning("location:1:1 Warning:\n\tsomething weird happened"); |
| Mockito.verify(mLoggerMock).error(null /* throwable */, |
| "location:1:1 Error:\n\tsomething bad happened"); |
| Mockito.verify(mLoggerMock).verbose(Actions.HEADER); |
| Mockito.verify(mLoggerMock).warning("\nSee http://g.co/androidstudio/manifest-merger " |
| + "for more information about the manifest merger.\n"); |
| Mockito.verifyNoMoreInteractions(mLoggerMock); |
| } |
| |
| public void testItermediaryMerges() { |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .addMergingStage("<first/>") |
| .addMergingStage("<second/>") |
| .addMergingStage("<third/>") |
| .build(); |
| |
| ImmutableList<String> intermediaryStages = mergingReport.getIntermediaryStages(); |
| assertEquals(3, intermediaryStages.size()); |
| assertEquals("<first/>", intermediaryStages.get(0)); |
| assertEquals("<second/>", intermediaryStages.get(1)); |
| assertEquals("<third/>", intermediaryStages.get(2)); |
| } |
| |
| public void testGetMergedDocument() { |
| XmlDocument xmlDocument = |
| new XmlDocument( |
| mSourceLocation, |
| mKeyResolver, |
| mPropertyResolver, |
| mElement, |
| XmlDocument.Type.MAIN, |
| Optional.<String>absent() /* mainManifestPackageName */); |
| |
| MergingReport mergingReport = new MergingReport.Builder(mLoggerMock) |
| .setMergedDocument(xmlDocument) |
| .build(); |
| |
| assertTrue(mergingReport.getMergedDocument().isPresent()); |
| assertEquals(xmlDocument, mergingReport.getMergedDocument().get()); |
| } |
| } |