Skip to content

Commit 4607ef9

Browse files
Merge 'literalList' and 'list' functions
1 parent 77d6c63 commit 4607ef9

File tree

3 files changed

+79
-54
lines changed

3 files changed

+79
-54
lines changed

src/ExpressionList.php

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,10 @@
2222
namespace WikibaseSolutions\CypherDSL;
2323

2424
use TypeError;
25-
use WikibaseSolutions\CypherDSL\Literals\Boolean;
26-
use WikibaseSolutions\CypherDSL\Literals\Decimal;
27-
use WikibaseSolutions\CypherDSL\Literals\Literal;
28-
use WikibaseSolutions\CypherDSL\Literals\StringLiteral;
2925
use WikibaseSolutions\CypherDSL\Traits\EscapeTrait;
3026
use WikibaseSolutions\CypherDSL\Traits\ListTypeTrait;
3127
use WikibaseSolutions\CypherDSL\Types\AnyType;
3228
use WikibaseSolutions\CypherDSL\Types\CompositeTypes\ListType;
33-
use function get_class;
34-
use function get_debug_type;
35-
use function gettype;
36-
use function is_bool;
37-
use function is_float;
38-
use function is_int;
39-
use function is_object;
40-
use function is_string;
41-
use function method_exists;
4229

4330
/**
4431
* This class represents a list of expressions. For example, this class can represent the following

src/Query.php

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@
5454
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\NodeType;
5555
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\PathType;
5656
use WikibaseSolutions\CypherDSL\Types\StructuralTypes\StructuralType;
57-
use function get_class;
58-
use function gettype;
59-
use function is_bool;
60-
use function is_float;
61-
use function is_int;
62-
use function is_object;
63-
use function is_string;
64-
use function method_exists;
6557

6658
/**
6759
* Builder class for building complex Cypher queries.
@@ -151,35 +143,25 @@ public static function literal($literal): PropertyType
151143
}
152144

153145
$actualType = is_object($literal) ? get_class($literal) : gettype($literal);
146+
154147
throw new InvalidArgumentException("The literal type " . $actualType . " is not supported by Cypher");
155148
}
156149

157150
/**
158151
* Creates a list of expressions.
159152
*
160-
* @param AnyType[] $expressions
153+
* @param iterable $values
161154
* @return ExpressionList
162155
*/
163-
public static function list(array $expressions): ExpressionList
156+
public static function list(iterable $values): ExpressionList
164157
{
165-
return new ExpressionList($expressions);
166-
}
167-
168-
/**
169-
* Creates a list of literal expressions.
170-
*
171-
* @param mixed[] $expressions
172-
*
173-
* @return ExpressionList
174-
*/
175-
public static function literalList(iterable $literals): ExpressionList
176-
{
177-
$tbr = [];
178-
foreach ($literals as $literal) {
179-
$tbr[] = self::literal($literal);
158+
$expressions = [];
159+
foreach ($values as $value) {
160+
$expressions[] = $value instanceof AnyType ?
161+
$value : self::literal($value);
180162
}
181163

182-
return new ExpressionList($tbr);
164+
return new ExpressionList($expressions);
183165
}
184166

185167
/**

tests/Unit/QueryTest.php

Lines changed: 71 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
use InvalidArgumentException;
2525
use PHPUnit\Framework\TestCase;
26-
use TypeError;
2726
use WikibaseSolutions\CypherDSL\Assignment;
2827
use WikibaseSolutions\CypherDSL\Clauses\Clause;
2928
use WikibaseSolutions\CypherDSL\Clauses\MatchClause;
@@ -116,6 +115,77 @@ public function testList()
116115
$this->assertInstanceOf(ExpressionList::class, $list);
117116
}
118117

118+
public function testListOfLiterals()
119+
{
120+
$list = Query::list(["hello", "world", 1.0, 1, 2, 3, true]);
121+
122+
$this->assertInstanceOf(ExpressionList::class, $list);
123+
}
124+
125+
public function testListOfMixed()
126+
{
127+
$list = Query::list([$this->getQueryConvertableMock(AnyType::class, "hello"), "world"]);
128+
129+
$this->assertInstanceOf(ExpressionList::class, $list);
130+
}
131+
132+
public function testListOfAnyType()
133+
{
134+
$list = Query::list([$this->getQueryConvertableMock(AnyType::class, "hello"), $this->getQueryConvertableMock(AnyType::class, "world")]);
135+
136+
$this->assertInstanceOf(ExpressionList::class, $list);
137+
}
138+
139+
public function testNestedList()
140+
{
141+
$list = Query::list([Query::list([])]);
142+
143+
$this->assertInstanceOf(ExpressionList::class, $list);
144+
}
145+
146+
public function testIteratorList()
147+
{
148+
$iterator = new class implements \Iterator {
149+
private int $count = 0;
150+
151+
public function current()
152+
{
153+
return 1;
154+
}
155+
156+
public function next()
157+
{
158+
$this->count++;
159+
return 1;
160+
}
161+
162+
public function key()
163+
{
164+
return 0;
165+
}
166+
167+
public function valid()
168+
{
169+
// In order to avoid an infinite loop
170+
return $this->count < 10;
171+
}
172+
173+
public function rewind()
174+
{
175+
}
176+
};
177+
178+
$list = Query::list($iterator);
179+
180+
$this->assertInstanceOf(ExpressionList::class, $list);
181+
}
182+
183+
public function testInvalidList()
184+
{
185+
$this->expectException(InvalidArgumentException::class);
186+
Query::list([new class() {}]);
187+
}
188+
119189
public function testMap()
120190
{
121191
$map = Query::map([]);
@@ -422,20 +492,6 @@ public function testInvalidLiteral(): void
422492
Query::literal($literal);
423493
}
424494

425-
public function testFromLiterals(): void
426-
{
427-
$expressionList = Query::literalList(['a', 'b', 234.3, 1, true, false]);
428-
429-
$this->assertSame("['a', 'b', 234.3, 1, true, false]", $expressionList->toQuery());
430-
}
431-
432-
public function testFromLiteralsError(): void
433-
{
434-
$expressionList = Query::literalList(['a', 'b', 234.3, 1, true, false]);
435-
$this->expectException(InvalidArgumentException::class);
436-
$expressionList = Query::literalList([$expressionList]);
437-
}
438-
439495
public function testWikiExamples()
440496
{
441497
/*

0 commit comments

Comments
 (0)