mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-22 21:59:37 +08:00
141 lines
5.8 KiB
Python
141 lines
5.8 KiB
Python
from unittest.mock import patch
|
|
|
|
from cura.HitChecker import HitChecker
|
|
from cura.OneAtATimeIterator import OneAtATimeIterator
|
|
from cura.Scene.CuraSceneNode import CuraSceneNode
|
|
|
|
|
|
def test_anyTwoNodesBlockEachOther_True():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
# node1 and node2 block each other
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 1},
|
|
node2: {node1: 1, node2: 0}
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2])
|
|
assert hit_checker.anyTwoNodesBlockEachOther([node1, node2])
|
|
assert hit_checker.anyTwoNodesBlockEachOther([node2, node1])
|
|
|
|
|
|
def test_anyTwoNodesBlockEachOther_False():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
# node1 blocks node2, but node2 doesn't block node1
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 1},
|
|
node2: {node1: 0, node2: 0}
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2])
|
|
assert not hit_checker.anyTwoNodesBlockEachOther([node1, node2])
|
|
assert not hit_checker.anyTwoNodesBlockEachOther([node2, node1])
|
|
|
|
|
|
def test_canPrintBefore():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
node3 = CuraSceneNode(no_setting_override=True)
|
|
# nodes can be printed only in order node1 -> node2 -> node3
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 0, node3: 0},
|
|
node2: {node1: 1, node2: 0, node3: 0},
|
|
node3: {node1: 1, node2: 1, node3: 0},
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2, node3])
|
|
|
|
assert hit_checker.canPrintBefore(node1, [node2])
|
|
assert hit_checker.canPrintBefore(node1, [node3])
|
|
assert hit_checker.canPrintBefore(node1, [node2, node3])
|
|
assert hit_checker.canPrintBefore(node1, [node3, node2])
|
|
|
|
assert hit_checker.canPrintBefore(node2, [node3])
|
|
assert not hit_checker.canPrintBefore(node2, [node1])
|
|
assert not hit_checker.canPrintBefore(node2, [node1, node3])
|
|
assert not hit_checker.canPrintBefore(node2, [node3, node1])
|
|
|
|
assert not hit_checker.canPrintBefore(node3, [node1])
|
|
assert not hit_checker.canPrintBefore(node3, [node2])
|
|
assert not hit_checker.canPrintBefore(node3, [node1, node2])
|
|
assert not hit_checker.canPrintBefore(node3, [node2, node1])
|
|
|
|
|
|
def test_canPrintAfter():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
node3 = CuraSceneNode(no_setting_override=True)
|
|
|
|
# nodes can be printed only in order node1 -> node2 -> node3
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 0, node3: 0},
|
|
node2: {node1: 1, node2: 0, node3: 0},
|
|
node3: {node1: 1, node2: 1, node3: 0},
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2, node3])
|
|
|
|
assert not hit_checker.canPrintAfter(node1, [node2])
|
|
assert not hit_checker.canPrintAfter(node1, [node3])
|
|
assert not hit_checker.canPrintAfter(node1, [node2, node3])
|
|
assert not hit_checker.canPrintAfter(node1, [node3, node2])
|
|
|
|
assert hit_checker.canPrintAfter(node2, [node1])
|
|
assert not hit_checker.canPrintAfter(node2, [node3])
|
|
assert not hit_checker.canPrintAfter(node2, [node1, node3])
|
|
assert not hit_checker.canPrintAfter(node2, [node3, node1])
|
|
|
|
assert hit_checker.canPrintAfter(node3, [node1])
|
|
assert hit_checker.canPrintAfter(node3, [node2])
|
|
assert hit_checker.canPrintAfter(node3, [node1, node2])
|
|
assert hit_checker.canPrintAfter(node3, [node2, node1])
|
|
|
|
|
|
def test_calculateScore():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
node3 = CuraSceneNode(no_setting_override=True)
|
|
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 0, node3: 0}, # sum is 0
|
|
node2: {node1: 1, node2: 0, node3: 0}, # sum is 1
|
|
node3: {node1: 1, node2: 1, node3: 0}, # sum is 2
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2, node3])
|
|
|
|
# score is a diff between sums
|
|
assert hit_checker.calculateScore(node1, node2) == -1
|
|
assert hit_checker.calculateScore(node2, node1) == 1
|
|
assert hit_checker.calculateScore(node1, node3) == -2
|
|
assert hit_checker.calculateScore(node3, node1) == 2
|
|
assert hit_checker.calculateScore(node2, node3) == -1
|
|
assert hit_checker.calculateScore(node3, node2) == 1
|
|
|
|
|
|
def test_canPrintNodesInProvidedOrder():
|
|
node1 = CuraSceneNode(no_setting_override=True)
|
|
node2 = CuraSceneNode(no_setting_override=True)
|
|
node3 = CuraSceneNode(no_setting_override=True)
|
|
|
|
# nodes can be printed only in order node1 -> node2 -> node3
|
|
hit_map = {
|
|
node1: {node1: 0, node2: 0, node3: 0}, # 0
|
|
node2: {node1: 1, node2: 0, node3: 0}, # 1
|
|
node3: {node1: 1, node2: 1, node3: 0}, # 2
|
|
}
|
|
|
|
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
|
|
hit_checker = HitChecker([node1, node2, node3])
|
|
assert hit_checker.canPrintNodesInProvidedOrder([node1, node2, node3])
|
|
assert not hit_checker.canPrintNodesInProvidedOrder([node1, node3, node2])
|
|
assert not hit_checker.canPrintNodesInProvidedOrder([node2, node1, node3])
|
|
assert not hit_checker.canPrintNodesInProvidedOrder([node2, node3, node1])
|
|
assert not hit_checker.canPrintNodesInProvidedOrder([node3, node1, node2])
|
|
assert not hit_checker.canPrintNodesInProvidedOrder([node3, node2, node1]) |