mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 08:56:55 +00:00
Replace existing Robolectric test task with functioning one.
This CL does the following: - Creates a dir for multivalentTests - Creates symlinks for the dir to keep Android Studio happy - Moves many files to the multivalentTests dir - Adjusts gradle and soong build files to use the new dir as part of their source sets. Test: ./gradlew :NexusLauncher:testGoogleWithQuickstepDebugUnitTest Test: atest Launcher3RoboTests Fix: 316553886 Bug: 316553889 Flag: NA Change-Id: Iae28fd0c0191b3ecf9bd2950800875950cca2622
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.launcher3.celllayout;
|
||||
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import android.graphics.Point;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CellLayoutTestCaseReader {
|
||||
|
||||
public abstract static class TestSection {
|
||||
State state;
|
||||
|
||||
public TestSection(State state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public State getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(State state) {
|
||||
this.state = state;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Comment extends TestSection {
|
||||
public Comment() {
|
||||
super(State.COMMENT);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Arguments extends TestSection {
|
||||
String[] arguments;
|
||||
|
||||
public Arguments(String[] arguments) {
|
||||
super(State.ARGUMENTS);
|
||||
this.arguments = arguments;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Board extends TestSection {
|
||||
public Point gridSize;
|
||||
public String board;
|
||||
|
||||
public Board(Point gridSize, String board) {
|
||||
super(State.BOARD);
|
||||
this.gridSize = gridSize;
|
||||
this.board = board;
|
||||
}
|
||||
}
|
||||
|
||||
public enum State {
|
||||
START,
|
||||
ARGUMENTS,
|
||||
BOARD,
|
||||
END,
|
||||
COMMENT
|
||||
}
|
||||
|
||||
String mTest;
|
||||
|
||||
protected CellLayoutTestCaseReader(String test) {
|
||||
mTest = test;
|
||||
}
|
||||
|
||||
public static CellLayoutTestCaseReader readFromFile(String fileName) throws IOException {
|
||||
String fileStr = new BufferedReader(new InputStreamReader(
|
||||
getInstrumentation().getContext().getAssets().open(fileName))
|
||||
).lines().collect(Collectors.joining("\n"));
|
||||
return new CellLayoutTestCaseReader(fileStr);
|
||||
}
|
||||
|
||||
private State getStateFromLine(String line) {
|
||||
String typeWithColons = line.trim().split(" ")[0].trim();
|
||||
String type = typeWithColons.substring(0, typeWithColons.length() - 1);
|
||||
try {
|
||||
return Enum.valueOf(State.class, type.toUpperCase());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(
|
||||
"The given tag " + typeWithColons + " doesn't match with the existing tags");
|
||||
}
|
||||
}
|
||||
|
||||
private String removeTag(String line) {
|
||||
return line.split(":")[1];
|
||||
}
|
||||
|
||||
private TestSection parseNextLine(Iterator<String> it) {
|
||||
String line = it.next();
|
||||
if (line.trim().charAt(0) == '#') {
|
||||
return new Comment();
|
||||
}
|
||||
State state = getStateFromLine(line);
|
||||
line = removeTag(line);
|
||||
switch (state) {
|
||||
case ARGUMENTS:
|
||||
return new Arguments(parseArgumentsLine(line));
|
||||
case BOARD:
|
||||
Point grid = parseGridSize(line);
|
||||
return new Board(grid, parseBoard(it, grid.y));
|
||||
default:
|
||||
return new Comment();
|
||||
}
|
||||
}
|
||||
|
||||
public List<TestSection> parse() {
|
||||
List<TestSection> sections = new ArrayList<>();
|
||||
String[] lines = mTest.split("\n");
|
||||
Iterator<String> it = Arrays.stream(lines).iterator();
|
||||
while (it.hasNext()) {
|
||||
TestSection section = parseNextLine(it);
|
||||
if (section.state == State.COMMENT) {
|
||||
continue;
|
||||
}
|
||||
sections.add(section);
|
||||
}
|
||||
return sections;
|
||||
}
|
||||
|
||||
private String parseBoard(Iterator<String> it, int rows) {
|
||||
StringBuilder board = new StringBuilder();
|
||||
for (int j = 0; j < rows; j++) {
|
||||
board.append(it.next() + "\n");
|
||||
}
|
||||
return board.toString();
|
||||
}
|
||||
|
||||
private String[] parseArgumentsLine(String line) {
|
||||
return Arrays.stream(line.trim().split(" ")).map(String::trim).toArray(String[]::new);
|
||||
}
|
||||
|
||||
private Point parseGridSize(String line) {
|
||||
String[] values = line.toLowerCase(Locale.ROOT).split("x");
|
||||
int x = Integer.parseInt(values[0].trim());
|
||||
int y = Integer.parseInt(values[1].trim());
|
||||
return new Point(x, y);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user