Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 5 additions & 58 deletions .github/workflows/pr-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ jobs:
steps:
- name: Checkout main repository (PR)
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
path: main-repo

- name: Set up JDK 17
uses: actions/setup-java@v4
Expand All @@ -33,63 +30,13 @@ jobs:
repository: ${{ secrets.TESTS_REPO_OWNER }}/${{ secrets.TESTS_REPO_NAME }}
token: ${{ secrets.TESTS_REPO_TOKEN }}
path: hidden-tests
fetch-depth: 1

- name: Copy test files
run: |
echo "📂 Listing source directory:"
ls -R hidden-tests

echo "🚀 Copying tests..."
cp -r hidden-tests/expressions/src/test/java/hse/java/* main-repo/expressions/src/test/java/hse/java/
echo "✅ Tests copied"

echo "Copying test data"
cp -r hidden-tests/src/test/java/* main-repo/src/test/java/
echo "Test data copied"
rm -rf hidden-tests

- name: Run Maven tests
id: test
working-directory: main-repo/expressions
run: mvn clean test
continue-on-error: true

- name: Comment PR with test results
if: always()
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const testStatus = '${{ steps.test.outcome }}';
let comment = '## 🧪 Результаты автоматического тестирования\n\n';

if (testStatus === 'success') {
comment += '✅ **Все тесты прошли успешно!**\n\n';
} else {
comment += '❌ **Некоторые тесты не прошли.**\n\n';
}

const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});

const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Результаты автоматического тестирования')
);

if (botComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: comment
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: comment
});
}
- name: Run tests
run: mvn -B test
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
.idea
.DS_Store
.mvn

*.class
target/*
expressions/.vscode
expressions/app/*
expressions/target/*
target/*

presentations/*
out/*
17 changes: 0 additions & 17 deletions expressions/src/main/java/hse/java/lectures/lecture1/Cat.java

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
14 changes: 10 additions & 4 deletions expressions/pom.xml → pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<modelVersion>4.0.0</modelVersion>

<groupId>hse.java</groupId>
<artifactId>expressions</artifactId>
<version>1.0-SNAPSHOT</version>
<artifactId>hse-java</artifactId>
<version>1</version>

<properties>
<maven.compiler.source>17</maven.compiler.source>
Expand All @@ -24,6 +24,13 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Jackson для чтения JSON в тестах -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand All @@ -45,7 +52,7 @@
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>hse.java.lectures.lecture1.HelloWorld</mainClass>
<mainClass>hse.java.lectures.lecture1.Game</mainClass>
</manifest>
</archive>
</configuration>
Expand All @@ -55,7 +62,6 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
</plugin>
<!-- Плагин для создания Mac приложения из JAR (запускается вручную: mvn exec:exec@jpackage) -->
</plugins>
</build>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,26 @@
import javax.swing.*;
import java.awt.*;

public class HelloWorld {
public class Game {
public static void main(String[] args) {
JFrame frame = new JFrame("XO");

JFrame frame = new JFrame("Oh my God!!!");
frame.setSize(300, 300);
frame.setLocation(200, 200);

JButton[][] buttons = new JButton[3][3];

JPanel panel = new JPanel(new GridLayout(3,3));
for (int i = 0; i < 9; i++) {
panel.add(new JButton());
JButton button = new JButton();
button.addActionListener(a -> {
button.setText("X");
});
panel.add(button);
}
frame.add(panel);
JDialog dialog;
frame.setVisible(true);

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
7 changes: 7 additions & 0 deletions src/main/java/hse/java/lectures/lecture1/HelloWorld.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package hse.java.lectures.lecture1;

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
22 changes: 22 additions & 0 deletions src/main/java/hse/java/practice/task1/Cube.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package hse.java.practice.task1;

public interface Cube {

// Метод вращения верхней грани кубика
void up(RotateDirection direction);

// Метод вращения нижней грани кубика
void down(RotateDirection direction);

// Метод вращения левой грани кубика
void left(RotateDirection direction);

// Метод вращения правой грани кубика
void right(RotateDirection direction);

// Метод вращения передней грани кубика
void front(RotateDirection direction);

// Метод вращения задней грани кубика
void back(RotateDirection direction);
}
10 changes: 10 additions & 0 deletions src/main/java/hse/java/practice/task1/CubeColor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package hse.java.practice.task1;

public enum CubeColor {
GREEN,
RED,
BLUE,
WHITE,
YELLOW,
ORANGE
}
36 changes: 36 additions & 0 deletions src/main/java/hse/java/practice/task1/Edge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package hse.java.practice.task1;

import java.awt.*;
import java.util.Arrays;
import java.util.Random;

public class Edge {

private final CubeColor[][] parts;

public Edge(CubeColor[][] parts) {
this.parts = parts;
}

public Edge(CubeColor color) {
this.parts = new CubeColor[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
parts[i][j] = color;
}
}
}

public Edge() {
parts = new CubeColor[3][3];
}

public CubeColor[][] getParts() {
return parts;
}

@Override
public String toString() {
return Arrays.deepToString(parts);
}
}
18 changes: 18 additions & 0 deletions src/main/java/hse/java/practice/task1/EdgePosition.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package hse.java.practice.task1;

/**
* Ордер в енуме соответствует позиции грани куба
* в массиве граней
* edges[0] -> UP
* edges[1] -> DOWN
* edges[2] -> LEFT
* ...
*/
public enum EdgePosition {
UP,
DOWN,
LEFT,
RIGHT,
FRONT,
BACK
}
11 changes: 11 additions & 0 deletions src/main/java/hse/java/practice/task1/RotateDirection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package hse.java.practice.task1;

/**
* Направление вращения грани кубика рубика
*/
public enum RotateDirection {
// Против часовой стрелки
COUNTERCLOCKWISE,
// По часовой стрелке
CLOCKWISE
}
42 changes: 42 additions & 0 deletions src/main/java/hse/java/practice/task1/RubiksCube.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package hse.java.practice.task1;


import java.util.Arrays;

/**
* Необходимо реализовать интерфейс Cube
* При повороте передней грани, меняются верх низ право и лево
*/
public class RubiksCube {

private static final int EDGES_COUNT = 6;

private final Edge[] edges = new Edge[EDGES_COUNT];

/**
* Создать валидный собранный кубик
* грани разместить по ордеру в енуме цветов
* грань 0 -> цвет 0
* грань 1 -> цвет 1
* ...
*/
public RubiksCube() {
CubeColor[] colors = CubeColor.values();
for (int i = 0; i < 6; i++) {
edges[i] = new Edge(colors[i]);
}
}

public void front(RotateDirection direction) {

}

public Edge[] getEdges() {
return edges;
}

@Override
public String toString() {
return Arrays.toString(edges);
}
}
16 changes: 16 additions & 0 deletions src/main/java/hse/java/practice/task1/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Необходимо реализовать методы поворота кубика Рубика.

Кубик представляет собой классический куб 3×3×3:
- 6 граней;
- каждая грань состоит из 9 элементов (стикеров);
- каждый элемент однозначно определяется своим цветом.

Каждую из граней можно вращать по часовой стрелке или против часовой стрелки.
При выполнении поворота:
- изменяется расположение элементов на самой вращаемой грани;
- переставляются элементы на четырёх соседних гранях, примыкающих к этой грани.

В рамках задачи необходимо:
- формально представить состояние кубика (структуры `Cube`, `Edge`, `CubeColor`, `EdgePosition` уже заданы или должны быть использованы согласно условию);
- реализовать операции поворота граней во всех допустимых направлениях согласно перечислению `RotateDirection`;
- гарантировать корректное изменение состояния кубика при каждом повороте, чтобы последовательность поворотов давала ожидаемый результат (см. тесты в `CubeSimpleTest`).
File renamed without changes
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
public class BaseTest {

@Test
void test() {}
void test() {

}
}
Loading
Loading