Skip to content

Commit cf5103e

Browse files
author
Vitaliy
authored
Merge pull request #122 from magento/92-tests-on-php-class-completion-for-the-source-model
92 tests on php class completion for the source model
2 parents ef1ada0 + d98b37b commit cf5103e

File tree

6 files changed

+243
-2
lines changed

6 files changed

+243
-2
lines changed

src/com/magento/idea/magento2plugin/completion/xml/XmlCompletionContributor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public XmlCompletionContributor() {
107107
extend(CompletionType.BASIC, psiElement(XmlTokenType.XML_DATA_CHARACTERS)
108108
.inside(XmlPatterns.xmlTag().withName(ModuleSystemXml.XML_TAG_SOURCE_MODEL)
109109
.withParent(XmlPatterns.xmlTag().withName(ModuleSystemXml.FIELD_ELEMENT_NAME))
110-
).inFile(xmlFile().withName(string().endsWith(ModuleSystemXml.FILE_NAME))),
110+
).inFile(xmlFile().withName(string().matches(ModuleSystemXml.FILE_NAME))),
111111
new PhpClassCompletionProvider()
112112
);
113113

@@ -136,7 +136,7 @@ public XmlCompletionContributor() {
136136
.inside(XmlPatterns.xmlAttribute().withName(ModuleWidgetXml.ATTRIBUTE_SOURCE_MODEL_NAME)
137137
.withParent(XmlPatterns.xmlTag().withName(ModuleWidgetXml.TAG_PARAMETER_NAME).
138138
withParent(XmlPatterns.xmlTag().withName(ModuleWidgetXml.TAG_PARAMETERS_NAME)))
139-
).inFile(xmlFile().withName(string().endsWith(ModuleWidgetXml.FILE_NAME))),
139+
).inFile(xmlFile().withName(string().matches(ModuleWidgetXml.FILE_NAME))),
140140
new PhpClassCompletionProvider()
141141
);
142142

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
namespace Magento\Framework\Option
3+
{
4+
interface ArrayInterface {}
5+
}
6+
7+
namespace Magento\Config\Model\Config\Source
8+
{
9+
use Magento\Framework\Option\ArrayInterface;
10+
class Yesno implements ArrayInterface {}
11+
}
12+
13+
namespace Magento\Backend\Model\Source
14+
{
15+
use Magento\Framework\Option\ArrayInterface;
16+
class Roles implements ArrayInterface {}
17+
}
18+
19+
namespace Magento\Customer\Model\Source
20+
{
21+
use Magento\Framework\Option\ArrayInterface;
22+
class Roles implements ArrayInterface {}
23+
}
24+
25+
namespace Magento\B2b\Model\Source
26+
{
27+
use Magento\Framework\Option\ArrayInterface;
28+
class Roles implements ArrayInterface {}
29+
}

testData/completion/common/system.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
10+
<system>
11+
<section id="catalog">
12+
<group id="test">
13+
<field id="test">
14+
<label>Test suit to check completion for source_model tag</label>
15+
<source_model>Yesno<caret></source_model>
16+
</field>
17+
</group>
18+
</section>
19+
</system>
20+
</config>

testData/completion/common/widget.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
10+
<widget id="test">
11+
<label translate="true">Test Widget</label>
12+
<description translate="true">Test Widget</description>
13+
<parameters>
14+
<parameter name="test_yesno" xsi:type="select" source_model="Yesno<caret>">
15+
<label translate="true">Test Boolean field</label>
16+
</parameter>
17+
</parameters>
18+
</widget>
19+
</widgets>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.completion.xml;
6+
7+
import com.intellij.testFramework.fixtures.BasePlatformTestCase;
8+
9+
import java.util.Arrays;
10+
import java.util.List;
11+
12+
abstract public class CompletionLightJavaCodeInsightFixtureTestCase extends BasePlatformTestCase {
13+
14+
public void assertCompletionContains(String filePath, String... lookupStrings) {
15+
myFixture.configureByFile(filePath);
16+
myFixture.completeBasic();
17+
18+
checkContainsCompletion(lookupStrings);
19+
}
20+
21+
protected void assertCompletionMatchWithFilePositiveCase(
22+
String positiveFilePath,
23+
String... lookupStrings
24+
) {
25+
myFixture.configureByFile(positiveFilePath);
26+
myFixture.completeBasic();
27+
28+
String messageEmptyLookup = "Failed that completion contains `%s` for file " + positiveFilePath;
29+
String messageCompletionContains = "Failed that completion contains `%s` in `%s` for file " + positiveFilePath;
30+
31+
checkContainsCompletion(lookupStrings, messageEmptyLookup, messageCompletionContains);
32+
}
33+
34+
protected void assertCompletionMatchWithFileNegativeCase(
35+
String negativeFilePath,
36+
String negativeFileText,
37+
String... lookupStrings
38+
) {
39+
myFixture.configureByText(negativeFilePath, negativeFileText);
40+
myFixture.completeBasic();
41+
42+
String messageCompletionNotContains = "Failed that completion not contains `%s` in `%s` for file "
43+
+ negativeFilePath;
44+
45+
checkNotContainsCompletion(lookupStrings, messageCompletionNotContains);
46+
}
47+
48+
protected void checkContainsCompletion(String[] lookupStrings) {
49+
String defaultMessageEmptyLookup = "Failed that completion contains `%s`";
50+
String defaultMessageCompletionContains = "Failed that completion contains `%s` in `%s`";
51+
52+
checkContainsCompletion(lookupStrings, defaultMessageEmptyLookup, defaultMessageCompletionContains);
53+
}
54+
55+
protected void checkContainsCompletion(
56+
String[] lookupStrings,
57+
String messageEmptyLookup,
58+
String messageCompletionContains
59+
) {
60+
if (lookupStrings.length == 0) {
61+
fail("No lookup element given");
62+
}
63+
List<String> lookupElements = myFixture.getLookupElementStrings();
64+
65+
if (null == lookupElements || lookupElements.size() == 0) {
66+
fail(String.format(messageEmptyLookup, Arrays.toString(lookupStrings)));
67+
}
68+
69+
for (String s : lookupStrings) {
70+
if (!lookupElements.contains(s)) {
71+
fail(String.format(messageCompletionContains, s, lookupElements.toString()));
72+
}
73+
}
74+
}
75+
76+
protected void checkNotContainsCompletion(String[] lookupStrings) {
77+
String defaultMessageCompletionNotContains = "Failed that completion not contains `%s` in `%s`";
78+
79+
checkNotContainsCompletion(lookupStrings, defaultMessageCompletionNotContains);
80+
}
81+
82+
protected void checkNotContainsCompletion(String[] lookupStrings, String messageCompletionNotContains) {
83+
if (lookupStrings.length == 0) {
84+
fail("No lookup element given");
85+
}
86+
List<String> lookupElements = myFixture.getLookupElementStrings();
87+
88+
if (null != lookupElements) {
89+
for (String s : lookupStrings) {
90+
if (lookupElements.contains(s)) {
91+
fail(String.format(messageCompletionNotContains, s, lookupElements.toString()));
92+
}
93+
}
94+
}
95+
}
96+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.completion.xml;
6+
7+
import com.intellij.openapi.vfs.VfsUtil;
8+
import com.intellij.openapi.vfs.VirtualFile;
9+
import com.magento.idea.magento2plugin.magento.files.ModuleSystemXml;
10+
import com.magento.idea.magento2plugin.magento.files.ModuleWidgetXml;
11+
import java.io.IOException;
12+
13+
public class SourceModelXmlCompletionRegistrarTest extends CompletionLightJavaCodeInsightFixtureTestCase {
14+
15+
private static VirtualFile systemXmlVirtualFile;
16+
private static VirtualFile widgetXmlVirtualFile;
17+
private static final String fixturesFolderPath;
18+
private static final String classesSourceFile;
19+
private static final String[] lookupStringsCheck;
20+
21+
static {
22+
fixturesFolderPath = "testData/completion/common/";
23+
classesSourceFile = "classes.php";
24+
lookupStringsCheck = new String[]{
25+
"Magento\\Config\\Model\\Config\\Source\\Yesno"
26+
};
27+
}
28+
29+
@Override
30+
protected void setUp() throws Exception {
31+
super.setUp();
32+
myFixture.copyFileToProject(classesSourceFile);
33+
systemXmlVirtualFile = myFixture.copyFileToProject(ModuleSystemXml.FILE_NAME);
34+
widgetXmlVirtualFile = myFixture.copyFileToProject(ModuleWidgetXml.FILE_NAME);
35+
}
36+
37+
@Override
38+
protected String getTestDataPath() {
39+
return fixturesFolderPath;
40+
}
41+
42+
public void testSourceModelXmlElementMustProvideCompletion() {
43+
assertCompletionContains(ModuleSystemXml.FILE_NAME, lookupStringsCheck);
44+
}
45+
46+
public void testSourceModelXmlElementMatchWithFilePositiveCase() {
47+
assertCompletionMatchWithFilePositiveCase(ModuleSystemXml.FILE_NAME, lookupStringsCheck);
48+
}
49+
50+
public void testSourceModelXmlElementMatchWithFileNegativeCase() throws IOException {
51+
String negativeFilePath = "not" + ModuleSystemXml.FILE_NAME;
52+
53+
assertCompletionMatchWithFileNegativeCase(
54+
negativeFilePath,
55+
VfsUtil.loadText(systemXmlVirtualFile),
56+
lookupStringsCheck
57+
);
58+
}
59+
60+
public void testSourceModelXmlAttributeMustProvideCompletion() {
61+
assertCompletionContains(ModuleWidgetXml.FILE_NAME, lookupStringsCheck);
62+
}
63+
64+
public void testSourceModelXmlAttributeMatchWithFilePositiveCase() {
65+
assertCompletionMatchWithFilePositiveCase(ModuleWidgetXml.FILE_NAME, lookupStringsCheck);
66+
}
67+
68+
public void testSourceModelXmlAttributeMatchWithFileNegativeCase() throws IOException {
69+
String negativeFilePath = "not" + ModuleWidgetXml.FILE_NAME;
70+
71+
assertCompletionMatchWithFileNegativeCase(
72+
negativeFilePath,
73+
VfsUtil.loadText(widgetXmlVirtualFile),
74+
lookupStringsCheck
75+
);
76+
}
77+
}

0 commit comments

Comments
 (0)