1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dexfuzz;
18 
19 import java.util.List;
20 
21 /**
22  * Stores the output of an executed command.
23  */
24 public class ExecutionResult {
25   public List<String> output;
26   public List<String> error;
27   public int returnValue;
28 
29   private String flattenedOutput;
30   private String flattenedOutputWithNewlines;
31   private String flattenedError;
32   private String flattenedErrorWithNewlines;
33   private String flattenedAll;
34 
35   private static final int TIMEOUT_RETURN_VALUE = 124;
36   private static final int SIGABORT_RETURN_VALUE = 134;
37 
38   /**
39    * Get only the output, with all lines concatenated together, excluding newline characters.
40    */
getFlattenedOutput()41   public String getFlattenedOutput() {
42     if (flattenedOutput == null) {
43       StringBuilder builder = new StringBuilder();
44       for (String line : output) {
45         builder.append(line);
46       }
47       flattenedOutput = builder.toString();
48     }
49     return flattenedOutput;
50   }
51 
52   /**
53    * Get only the output, with all lines concatenated together, including newline characters.
54    */
getFlattenedOutputWithNewlines()55   public String getFlattenedOutputWithNewlines() {
56     if (flattenedOutputWithNewlines == null) {
57       StringBuilder builder = new StringBuilder();
58       for (String line : output) {
59         builder.append(line).append("\n");
60       }
61       flattenedOutputWithNewlines = builder.toString();
62     }
63     return flattenedOutputWithNewlines;
64   }
65 
66   /**
67    * Get only the error, with all lines concatenated together, excluding newline characters.
68    */
getFlattenedError()69   public String getFlattenedError() {
70     if (flattenedError == null) {
71       StringBuilder builder = new StringBuilder();
72       for (String line : error) {
73         builder.append(line);
74       }
75       flattenedError = builder.toString();
76     }
77     return flattenedError;
78   }
79 
80   /**
81    * Get only the error, with all lines concatenated together, including newline characters.
82    */
getFlattenedErrorWithNewlines()83   public String getFlattenedErrorWithNewlines() {
84     if (flattenedErrorWithNewlines == null) {
85       StringBuilder builder = new StringBuilder();
86       for (String line : error) {
87         builder.append(line).append("\n");
88       }
89       flattenedErrorWithNewlines = builder.toString();
90     }
91     return flattenedErrorWithNewlines;
92   }
93 
94   /**
95    * Get both the output and error, concatenated together, excluding newline characters.
96    */
getFlattenedAll()97   public String getFlattenedAll() {
98     if (flattenedAll == null) {
99       flattenedAll = getFlattenedOutput() + getFlattenedError();
100     }
101     return flattenedAll;
102   }
103 
isTimeout()104   public boolean isTimeout() {
105     return (returnValue == TIMEOUT_RETURN_VALUE);
106   }
107 
isSigabort()108   public boolean isSigabort() {
109     return (returnValue == SIGABORT_RETURN_VALUE);
110   }
111 }